2014-04-13 45 views
0

下不起作用如何在proc打印中設置枚舉?

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打印?

回答

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; 

在這種情況下它不會真正幫助(它的方式更多的工作比其他的選擇來過濾掉行),但在其他更復雜的情況下,這樣的事情可能是有意義的。

1

您可能可以在proc打印語句中使用firstobs=3選項。

2

作爲SAS/Base程序的一般規則,您不能在其中創建變量(Proc SQL是一個明顯的例外,我想現在也是Proc Report)。其他模塊中的程序(如SAS/Stat中的程序)功能更多,而且許多模塊可以創建變量。但是,通常,datastep或Proc SQL是您創建變量的地方;程序就是你使用它們的地方。

可以通過使用firstobs來模擬你的第一個'proc print'。這指定了SAS在處理數據集時使用的第一個觀測值。因此,proc print data=foo(firstobs=3);應該產生您的示例中指定的輸出。

值得一提的是,firstobs的結果取決於數據的排序方式。

+0

我不會認爲'PROC SQL'是一個類似於'PROC PRINT'的過程;它是一個編程環境(如'PROC IML')。 – Joe