2011-10-31 16 views
5

Mam zestaw danych z 1000 obserwacji. Chcę wydrukować tylko ostatnią obserwację. Używanie:Jak wydrukować ostatnią obserwację zestawu danych SAS?

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

Mogę uzyskać ostatnią obserwację. Ale muszę wiedzieć z góry, że mój zestaw danych ma 1000 obserwacji. Jak to zrobić, nie wiedząc o tym?

+2

Hi Trevor pytanie „jak zdobyć kilka uwag zestaw danych "został tu odebrany: http://stackoverflow.com/questions/ 5658994/how-to-detect-a-data-set-has-no -obserwations-in-sas –

+0

heads-up dla każdego, kto uczy się na test SAS Base i skończył tutaj - nie daj się ponieść ich sztuczki - nie ma czegoś takiego jak opcja LASTOBS! :) –

Odpowiedz

7

Istnieje wiele sposobów na zrobienie tego. Oto dwa:

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

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

Po prostu odczytuje liczbę obserwacji w makrozmiennej zmiennej, a następnie wykorzystuje ją do określenia pierwszej obserwacji. (Zauważ, że var1 odnosi się do zmiennej w danych).

Innym rozwiązaniem byłoby utworzyć widok danych, które tylko utrzymuje ostatnią obserwację, a następnie wydrukować, że:

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

proc print data=tmp; run; 
1

Istnieje wiele sposobów, aby znaleźć liczba obserwacji; następujące makro jest jednym z przykładów.

%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

myślę, że opcja end dla SET, MERGE, MODIFY lub UPDATE oświadczenia jest bardzo przydatna.

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

Istnieją dwa proste rozwiązania:

Rozwiązanie 1:

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

Rozwiązanie 2:

data result; 
    set apple nobs=nobs; 
    if _N_=nobs then output; 
run; 
proc print data=result; 
run; 
Powiązane problemy