Manipolare osservazioni (firstobs, obs e where e delete)
 
Selezionare un sottoinsieme contiguo di osservazioni

A volte capita che non abbiamo bisogno di tutte le osservazioni e vogliamo cosi modificare il nostro data-set in modo da mantenere solo quelle di nostro interesse. Questa operazione è possibile utilizzando le opzioni firstobsobs che permettono di selezionare un sub-set di osservazioni. (ricordo comunque che questa operazione è gia possibili nella fase di importazione del data-set)

Vediamo un esempio  commentato che chiarisce l'uso di queste opzioni:

data hotdog;
infile "J:\laboratorio\dati\hotdog.txt" firstobs=2;
input tipo $ calorie sodio;
data tenere;                                  /*nuovo data-set*/                  
set hotdog (firstobs=3 obs=12);   /*uso l'istruzione set con le opzioni firstobs e obs per terene solo le osservazioni di mio interesse*/
proc print data=tenere;                /*stampo il nuovo data-set*/
run;

Selezionare determinate osservazioni

In alcuni casi vogliamo selezionare solo le osservazioni che rispondono a determinate caratteristiche. Questo si può ottenere facilmente con l'istruzione where seguita dalla condizione di selezione. Si tratta di una vera e propria query con la quale selezioniamo le osservazioni di  nostro interesse. 

Vediamo un esempio  commentato che chiarisce l'uso di questa istruzione

data hotdog;
infile "J:\laboratorio\dati\hotdog.txt" firstobs=2;
input tipo $ calorie sodio;
data tenere;                                  /*nuovo data-set*/                  
set hotdog ;                                  /*rendo attivo il data-set importato*/
where tipo="Beef";
proc print data=tenere;                /*stampo il nuovo data-set*/
run;

Nell'esempio viene generato un nuovo data-set che contiene solo le osservazioni la cui variabile tipo corrisponnde al valore carattere  "Beef".

Risultati analoghi si possono ottenere con l'istruzione if

Eliminare determinate osservazioni

Nel caso volessimo eliminare determinate osservazioni possiamo utilizzare l'istruzione delete insieme all'operatore condizionale if

Ecco un semplice esempio che elimina dal data-set (creandone uno di nuovo) le osservazioni il cui valore della variabile salario non supera una certa soglia.

data sal;                                   /*importo data-set*/
infile "D:\corso_sas_zip\640\dati\salari.dat" firstobs=2;
input voto salario sc $;
data sal1;                                     /*nuovo data-set*/
set sal;
if salario<25000 then delete;       /*elimino osservazioni*/
proc print data=sal1;                    /*stampo nuovo data-set*/
run;