如何在proc print中设置枚举?

时间:2014-04-13 17:26:41

标签: sas

以下不起作用

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中创建枚举?

3 个答案:

答案 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;

在这种情况下,它实际上并没有帮助(它比其他选项更多的工作来过滤掉行)但在其他更复杂的情况下这种事情可能有意义。