2011-10-31 22 views
5

Ho un set di dati con 1000 osservazioni. Voglio solo stampare l'ultima osservazione. Utilizzando il seguente:Come si stampa l'ultima osservazione di un dataset SAS?

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

Posso ottenere l'ultima osservazione. Ma devo sapere in anticipo che il mio set di dati contiene 1000 osservazioni. Come faccio a fare questo senza saperlo?

+2

Hi Trevor, alla domanda "come ottenere il numero di osservazioni in un set di dati "è stato risposto qui: http://stackoverflow.com/questions/ 5658994/how-to-detect-se-a-dati-set-ha-no-osservazioni-in-sas –

+0

un testa a testa per chi sta studiando per il test SAS Base e finito qui - non cadere per i loro trucchi - non esiste un'opzione LASTOBS! :) –

risposta

7

Ci sono molti modi per farlo. Eccone due:

Questo semplicemente legge il numero di osservazioni in una variabile macro, e quindi lo usa per specificare la prima osservazione. (Si noti che var1 si riferisce a una variabile nei dati.)

Un altro approccio sarebbe quello di creare una visualizzazione di dati che mantiene solo l'ultima osservazione e quindi stampare che:

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

proc print data=tmp; run; 
1

Ci sono molti modi per trovare il numero di osservazioni; la seguente macro è un esempio.

%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

Penso che l'opzione end per l'istruzione SET, MERGE, MODIFY, o UPDATE è molto utile.

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

ci sono due soluzioni semplici:

Soluzione 1:

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

Soluzione 2:

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