AI智能
改变未来

SAS中output的运用

output的用法,如下程序,set salary后不加output时,set读取一行观测时不会输出,只有当遇见后面的output时才会输出。

data test_data;set salary;if _n_ = 8 then do;x1=\'飞哥\';x2=\'男\';output;end;run;


输出结果只有一行。如果去掉output结果就是全部。

data test_data;set s;output;if _n_ = 8 then do;call missing(of _all_);x1=\'飞哥\';x2=\'男\';output;set s(firstobs=4 obs=6) ;put  _n_=;output;end;if _n_=9 then do;set s ;output;end;run;

通过运行这段程序发现,一个set语句对应一个 _N_变量,各自有各自的行指针变量互相不影响。但是_n_还是跟随最开始的set语句的变量。

1.set s读取到第八行执行。
x1=‘飞哥’;x2=‘男’;。相当于插入一行,利用output输出。接着输出set s(firstobs=4 obs=6) ;,就是第十行的数据。这个s的指针n2=4。
此时N1=8,所以不执行if=9.当n1=9时。先把s的第九行输出,看见的序号就是s的第九行。继续执行set s。此时并不从n2=4,或者n2=5,也不执行n1=9。而是给set s重新分配了n3=1。

data test_data;set s;output;if (_n_ = 8) or (_N_=9) then do;call missing(of _all_);x1=\'飞哥\';x2=\'男\';output;set s(firstobs=4 obs=6) ;put  _n_=;output;end;run;

这段代码证明了,set指针是分开的,n是不可更改的。第一次先从第四行读取,第二次再接着读第五行。
_N_这玩意第一次写入后便不会被更改,估计是编译的时候就确定好了。

总结:行指针_N_遵循第一个set。每一个set语句都会重新分配单独的_N_.SAS玩来玩去就是玩指针顺序。再加一点,_N_变量和最后写入数据集的obs号是不一致也是无关的。

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » SAS中output的运用