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 firstobs e obs 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;
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
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;