以下不起作用
proc print data=ch1.test ;
id=_N_ ;
where id >2 ;
sum var1 ;
run ;
Statement is not valid or it is used out of
proper order.
我可以在数据步骤中创建id
data test ;
set test ;
id = _n_ ;
run ;
然后proc print
有没有办法直接在proc print中创建枚举?
答案 0 :(得分:2)
作为SAS / Base程序的一般规则,您不能在其中创建变量(Proc SQL
是一个明显的例外。Proc Report
现在我认为)。其他模块中的过程(例如SAS / Stat中的过程)更加通用,许多模块可以创建变量。但是,通常,datastep或Proc SQL
是您创建变量的地方;程序是你使用它们的地方。
人们可以模仿你的第一个'proc'打印'虽然使用firstobs
。这指定了SAS在处理数据集时使用的第一个观察点。因此,proc print data=foo(firstobs=3);
应生成示例中指定的输出。
值得补充的是firstobs
的结果取决于数据的排序方式。
答案 1 :(得分:1)
您可以在proc print语句中使用firstobs=3
选项。
答案 2 :(得分:1)
FIRSTOBS
如其他地方所述,是针对这一具体问题的正确方法。
要获得更一般的答案,请考虑一个视图,或PROC REPORT
,这两种视图都能满足您的要求。
视图是一个没有实际运行的数据步骤,因此如果这是一个问题,它可以节省时间。
data print_view/view=print_view;
set yourdata;
id=_n_;
run;
然后您PROC PRINT
视图print_view
而不是yourdata
。您也可以直接在视图中进行过滤(where
语句,甚至是proc中不可能的first.<var>
类型过滤器。
PROC REPORT
实际上很复杂PROC PRINT
。它可以做很多事情,但其中包括动态创建变量的能力。
proc report nowd data=yourdata;
columns x y z;
compute x;
rowcounter+1;
endcomp;
run;
在这种情况下,它实际上并没有帮助(它比其他选项更多的工作来过滤掉行)但在其他更复杂的情况下这种事情可能有意义。