SAS-数据步中的几个常见的小语法...

2019-10-21 15:44:33 浏览数 (1)

今天写一写data步中的几个简单的小语法。

firstobs、obs、end

比较基础与常见的语法,如:firstobs,obs,end...,firstobs表示从数据集第某行记录开始,obs表示读取到第某行记录。end为一个“指针”指向最后一条记录。来看看一个例子~

代码语言:javascript复制
data test1;
  set SASHELP.CLASS  end=last;
  if last then aa=1;
run;
data test2;
  set SASHELP.CLASS (firstobs=3 obs=5)  end=last;
  if last then aa=1;
run;

上面代码什么效果,其实对比一下生成的数据集结果就知道了,很容易理解相关的含义...

_N_

_N_这是一个很好的变量,为啥是一个很好的变量呢,_N_的值是对应数据集中的每一条记录的行号。其实就是所谓PDV里面的一个关键变量,什么是PDV呢,好吧,作为一个没有系统学习过和从没完整看完任何一本SAS书的小编,对PDV的概念用不了官方语句来描述出来,只有一个抽象的理解,PDV就相当SAS数据运行的中转站吧,数据集的一切操作要先拿到中转站在从中转站拿出来。应该也是不太准...

感觉知不知道PDV其实不太重要,不知道一样写程序...

代码语言:javascript复制
data test3;
set SASHELP.CLASS ;
/*此处会出ERROR:ERROR: 变量 _N_ 不在文件“SASHELP.CLASS”中。*/
where _N_=3;
run;
data test4;
set SASHELP.CLASS ;
if _N_=3;
run;

看上面代码,用where就会出错,用if就不会出错,原因可以理解成where语句的执行是在中转站的入口(数据读入到PDV时)前起作用,而IF语句就相当在中转站出口(数据读出PDV)时起作用。

0 人点赞