当前位置: 首页>后端>正文

《The Little SAS Book》学习笔记---Chapter2(5) 双尾@@和单尾@

之前学习了@作为列指针在输入时发挥定位作用@符号如果放在input语句的变量名后面也会发挥不同的作用。

其中,双尾@@和单位@修饰符是比较常用的两种情况。

双尾@@实现从每行原始数据读取多个观测

input语句结尾处使用双尾@符号(@@),就像停车标志一样,表示,“停下,留在原始数据的当前行”。

SAS将停留在那行数据,继续读取数据直到数据读完或者没有双尾@@符号的input语句

来看书中的一个例子:

data rain;
    input city $ state $ normalrain meandayrain @@;
cards;
Nome city 2.5 15 Miami FL 6.75 
18 Raleigh NC . 12
;
run;

proc print data =rain noobs ;
title "Rain";
run;

打印结果如下:

city state normalrain meandayrain
Nome city 2.50 15
Miami FL 6.75 18
Raleigh NC . 12

单位@读取原始数据的一部分

当无需读取全部的数据,而是只读取部分数据时。

  • 通过只读取需要的变量以确定是否保留当前的观测,然后用一个@符号结束input语句。
  • 该符号告知SAS保留那行原始数据,然后可以使用IF语句来测试该观测,以确定是否是要保存的观测。
  • 如果是,可以使用第二条input语句为其余变量读取数据

通过例子进行理解:

data  freeways;
    input type $ @;
    if type = 'surface' then delete;
    input name $ PM $ AM $;
cards;
surface 606 1435 1677
freeway 705 1435 1677
surface 701 1435 1677
freeway 602 1435 1677
freeway 503 1435 1677
freeway 708 1435 1677
;
run;

proc print data = freeways noobs; title "Freeways" ; run;

上面的程序中,先input变量type,然后if语句进行判断type

如果是surface那么删除,只保留高速公路freeway的数据。

打印结果如下:

type name PM AM
freeway 705 1435 1677
freeway 602 1435 1677
freeway 503 1435 1677
freeway 708 1435 1677

https://www.xamrdz.com/backend/3ka1997366.html

相关文章: