SAS中output的运⽤
output的⽤法,如下程序,set salary后不加output时,set读取⼀⾏观测时不会输出,只有当遇见后⾯的output时才会输出。
data test_data;
set salary;
if _n_ = 8 then do;
x1='飞哥';
x2='男';
output;
end;
run;
output的反义词输出结果只有⼀⾏。如果去掉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号是不⼀致也是⽆关的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论