您好!我想问个关于_n_和set的问题;
首先我看到的_n_是指data step运行多少次,那么data里面读数据的话,有多少行数据_n_就是多少么?所以有时候会出现_n_就是obs的序数,是这样理解么?
然后就是关于
if _n_=1 then set b;(其中b是只有1行的数据);
set a;(a是很多行的数据)
run;
这样为什么结果会在a的每一行加上b呢?这个语句的逻辑不是很理解,希望能给点机制上的解释。谢谢!
1. _n_和数据集的行数不一定相等。
data step运行读数据集的时候,运行到run后会自动回到data语句。而每次回到data语句,_n_就会加1.与obs的序数无关。例如
data test;
put _n_=;
do i=1 to nobs;
set sashelp.class nobs=nobs;
output;
end;
run;
这个例子,程序的运行只经过data语句两次,所以_n_最大取值为2,与数据集的行数没有关系。