2011-10-31 88 views
5

我有一個包含1000個觀測值的數據集。我只想打印出最後的觀察結果。使用以下內容:如何打印SAS數據集的最新觀察結果?

proc print data=apple(firstobs = 1000 obs = 1000); 
run; 

我可以得到最後的觀察結果。但我必須事先知道我的數據集有1000個觀測值。如果不知道這一點,我該怎麼做?

+2

特雷弗嗨,這個問題:「如何讓意見的數量一個數據集「已經在這裏回答: http://stackoverflow.com/questions/ 5658994 /如何檢測是否有數據集有沒有意見在sas –

+0

一個正在研究SAS基礎測試,並在這裏結束的人 - 不要爲他們的技巧 - 沒有LASTOBS選項這樣的東西! :) –

回答

7

有很多方法可以做到這一點。這裏有兩個:

proc sql noprint; 
select n(var1) into :nobs 
from apple; 
quit; 

proc print data=apple(firstobs=&nobs); run; 

這只是將觀測數量讀入宏變量,然後用它來指定第一個觀測值。 (注意:var1指的是在您的數據的變量。)

另一種方法是創建一個僅保存最後觀測數據視圖,然後打印:

data tmp/view=tmp; 
set apple nobs=nobs; 
if _n_=nobs; 
run; 

proc print data=tmp; run; 
1

有很多方法可以找到觀測次數;下面的宏是一個例子。

%macro nobs (dsn); 
    %let nobs=0; 
    %let dsid = %sysfunc(open(&dsn)); 
    %if &dsid %then %let nobs = %sysfunc(attrn(&dsid,nobs)); 
    %let rc = %sysfunc(close(&dsid)); 
    &nobs 
%mend nobs; 

%let n = %nobs(apple); 

proc print data=apple (firstobs=&n obs=&n); run; 
3

我認爲end選項爲SETMERGEMODIFY,或UPDATE語句是非常有用的。

data x; 
    do i = 1 to 1000; 
    output; 
    end; 
run; 

data x; 
    set x end = _end; 
    end = _end; 
proc print data = x; 
    where end; 
run; 
0

有兩個簡單的解決方案:

解決方案1:

data result; 
    set apple end=end; 
    if end then output; 
run; 
proc print data=result; 
run; 

解決方案2:

data result; 
    set apple nobs=nobs; 
    if _N_=nobs then output; 
run; 
proc print data=result; 
run;