sas base giglio

40
\\sviluppojava2 sviluppojava sviluppo1008 SAS Base Loop del data-step Variabili Ci sono due tipi di variabili: - Alfanumeriche: tutti i numeri, lettere e caratteri speciali da 1 a 32.767 byte (dove 1 byte= 1 carattere) - Numeriche : numeri in virgola mobile di una lunghezza di 8 byte, di 16-17 cifre. I nomi possono essere di: - max 32 caratteri. - possono essere maiuscoli, minuscoli o misti. - iniziano con lettere o segni di sottolineatura. Le date sono in formato numerico dal numero di giorni dal 1 gennaio 1960. I valori missing sono uno spazio per gli alfanumerici e un punto per i numerici. I data set sono divisi in parte descrittiva e parte di dati. I tipi di output SAS principali sono log e ouput. Sintassi I commenti in SAS si scrivono: - *…; per una riga. - /* …. */ per più righe o commenti in macro. Inizializza PDV Esegue istruzione di lettura Fine del File ? Fine del passo di Data Esegue istruzione di programma Scrive l’osservazione nel data set SAS 1

Upload: scribd2099

Post on 29-Jun-2015

5.082 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: SAS Base Giglio

\\sviluppojava2 sviluppojava sviluppo1008

SAS Base

Loop del data-step

VariabiliCi sono due tipi di variabili:

- Alfanumeriche: tutti i numeri, lettere e caratteri speciali da 1 a 32.767 byte (dove 1 byte= 1 carattere)- Numeriche : numeri in virgola mobile di una lunghezza di 8 byte, di 16-17 cifre.

I nomi possono essere di:- max 32 caratteri.- possono essere maiuscoli, minuscoli o misti.- iniziano con lettere o segni di sottolineatura.

Le date sono in formato numerico dal numero di giorni dal 1 gennaio 1960.I valori missing sono uno spazio per gli alfanumerici e un punto per i numerici.

I data set sono divisi in parte descrittiva e parte di dati.I tipi di output SAS principali sono log e ouput.

SintassiI commenti in SAS si scrivono:- *…; per una riga.- /* …. */ per più righe o commenti in macro.

In un data set le righe sono definite osservazioni e le colonne variabili.Le istruzioni SAS iniziano con una parola chiave e finiscono con un ; .

Opzioni per cambiare l’aspetto di un prospettoOPTIONS opzione…

Inizializza PDV

Esegue istruzione di letturaFine del

File ?

Fine del passo di

Data

Esegue istruzione di programma

Scrive l’osservazione nel data set SAS

1

Page 2: SAS Base Giglio

DATE stampa la data e l’ora dell’inizio della sessione SAS nella parte superiore di ogni pagina.NODATE specifica di non stampare la data e l’ora.LINESIZE=larg. o LS=larg. specifica la dimensione della riga per l’output.PAGESIZE=n. o PS=n. specifica il numero di righe.

NUMBER stampa i numeri di paginaNONUMBER non stampa i numeri di paginaPAGENO=n specifica un numero di pagina iniziale per la prossima pagina in output.

FormatiPer definire il formato di un campo, in maniera permanente se fatto in un data step o temporanea se fatta su un output.

Format variabile formato;<$> format<w>.<d>

<$> se c’è il dollaro è un formato alfanumericoFormat = nome del formato<w> lunghezza del formato<d> numero di posizioni decimali

Alcuni formatiw.d es. 8.2 formato numerico standard$w es. $5 formato alfanumerico standardCOMMAw.d es comma9.2 formato numerico con puntoCOMMAXw.d es commax9.2 formato numerico con virgolaDOLLARw.d es dollar10.2 formato monetario con dollari e puntoPERCENTw.d es percent10.2 formato percentuale con punto

Esempi27134.2864 COMMA12.2 27,134.2927134.2864 COMMAX12.2 27.134,2927134.2864 12.2 27134.2927134.2864 DOLLAR12.2 $27,134.2927134.2864 DOLLARX12.2 $27.134,2927134.2864 DOLLAR9.2 $27134.2927134.2864 DOLLAR8.2 27134.2927134.2864 DOLLAR5.2 2713427134.2864 DOLLAR4.2 27E3 lui prova sempre a dare un formato.

50000 EURFRITL7.2 €25,821 EUROX6.2 €1,001 EURO6.2 €1.001 EUROITL10.2 1936.27

Date:MMDDYY6. 101601MMDDYY8. 10/16/01MMDDYY10. 10/16/2001DATE7. 16oct01DATE9. 16oct2001

0 MMDDYY8. 01/01/600 MMDDYY10. 01/01/19601 DATE9. 02jan1960-1 WORDDATE. December 31, 1959365 DDMMYY10. 31/12/1960

2

Page 3: SAS Base Giglio

366 WEEKDATE. Sunday, January 1, 19610 ITADFE9. 01Gen19600 ITADFDT16. 01Gen60:00:00:011 ITADFDD10. 02/01/1960-1 ITADFMY7. Dic1959366 ITADFWDX17. 01 Gennaio 1961366 ITADFWKX28. Domenica, 01 Gennaio 191

Formato definito dall’utente, non può finire con un numero.PROC FORMAT;

VALUE nome_formato valore1=’descrizione1’ valore2=’descrizione2’; etc….

RUN;

PROC FORMAT;value sesso 1=’Femmina’

2=’Maschio’Other=’Non codificato’;

RUN;

PROC FORMAT;value fmtpass low-49=’Sotto’

50-99=’In media’100-High=’Sopra la media’;

RUN;

PROC FORMAT;value $voto ‘A’=’Buono’

‘B’-‘D’=’Discreto’‘E’=Sufficiente’ ‘F’=Scarso’‘I’,’U’=’Vedere docente’;other=’Non codificato;

RUN;

PROC PRINT DATA=scuola.classe;FORMAT voto $voto. ;

RUN;

Alcune cose a cui fare attenzione:1234567 formato 8.0 12345671234.567 formato 8.0 1234.5671234567 formato 8.2 12345.67 ATTENZIONE!1234.567 formato 8.2 1234.567

In pratica se ci sono decimali viene mantenuto il valore.

Operatori AritmeticiSomma + sum x+y priorità bassaSottrazione - diff x-y priorità bassaMoltiplicazione * mult x*y priorità mediadivisione / divide x/y priorità mediaelevamento a potenza ** raise x**y priorità altacambio di segno - negative -x priorità alta

Il dato missing è considerato – infinito!!!

3

Page 4: SAS Base Giglio

FunzioniNome=funzione(argomento1,argomento2);

SUM(var1,var2, …, varn) somma variabili, sum(.. , ..) e non + per i missing (perché missing è meno infinito!)

TODAY() prende la data dall’orologio di sistemaMDY(mm,gg,aaaa) utilizza la data che inseriamo per dare la data SASDAY(data sas) estrae il giorno da una data SAS e restituisce il valore da 1 a 31MONTH(data sas) estrae il mese da una data SAS e restituisce il valore da 1 a 12YEAR(data sas) estrae l’anno da una data SAS e restituisce il valore a 4 cifreQTR(data sas) estrae il trimestre da una data SAS e restituisce il valore da 1 a 4WEEKDAY(data sas) estrae il giorno della settimana da una data SAS e restituisce il valore da 1 a

7. Dove 1 è la domenica.YRDIF(datai,dataf,base) restituisce il numero di anni tra due valori SAS

Datai data inizioDataf data fineBase:‘ACT/ACT’ o ‘ACTUAL’ utilizza il numero effettivo di giorni‘30/360’ usa mesi di 30 e anni di 360 giorni‘ACT/360’ utilizza il numero effettivo di giorni e un anno di 360 giorni‘ACT/365’ utilizza il numero effettivo di giorni e un anno di 365 giorni

Per i mesi basta moltiplicare il risultato per 12.INTCK(intervallo,da,a) restituisce il numero di intervalli tra date, ore o date e oreINTNX(intervallo,iniziare da,n di incremento) incrementa una data/oraL’intervallo può essere: DAY, WEEKDAY, MONTH, QTR, YEAR, HOUR, MINUTE, SECOND, ETC…

DROP var1 var2 etc… per eliminare le variabili menzionate (se aggiunto ali’istruzione DATA … drop=…)

KEEP var1 var2 etc… per tenere solo le variabili menzionateRENAME=(var1=var1_newname) rinomina la variabile

UPCASE(argomento) mette tutto in maiuscoloLENGTH variabile/i <$> lunghezza definisce la lunghezza di una variabile, che altrimenti prende

la lunghezza del primo campo (es length città $ 11;) Deve essere però definita prima di utilizzare la variabile.

DELETE cancella la riga su cui si trova il program data vector(OBS=n) numero di righe da prendere in input(FIRSTOBS=n) da quale riga iniziare il caricamentoRETAIN l’istruzione impedisce a SAS di re inizializzare la variabile che rimane disponibile

per l’elaborazione successiva BY l’istruzione consente di elaborare i dati in gruppiFIRST. assume 1 per la prima osservazione in un gruppoLAST. assume 1 per l’ultima osservazione in un gruppo_N_ variabile che conta il numero di iterazioniSET data-set END=var; oppure INPUT ‘nomefile’ END=var;- END crea una variabile temporanea che fa da indicatore di fine file, che è sempre a 0 e va a 1

quando è alla fine file. Nel caso della INPUT l’estrazione dell’ultimo record deve essere una condizione di output esplicita e non condizionale.

EsempioDATA _NULL_;

SET prog2.vendmag END=ultima;……IF ultima=1 THEN

PUT ‘Data set: PROG2:VENDMAG’;

4

Page 5: SAS Base Giglio

RUN;

SUBSTR(stringa,inizio,lunghezza) prende solo i caratteri a partire da quello d’inizio per la lunghezza specificata

SUBSTR(stringa,inizio,<lunghezza>)=valore; sostituisce i caratteri a partire da quello d’inizio con il valore segnato, se non metto la lunghezza toglie tutti i caratteri dal punto d’inizio alla fine. La lunghezza della stringa estratta è quella dell’originale, se non viene tagliata.

RIGHT(stringa) restituisce la stringa allineata a destraLEFT(stringa) restituisce la stringa allineata a sinistraLENGTH(stringa) restituisce la lunghezza della stringa SCAN(stringa,n,delimitatori) restituisce l’n-esima parola di una stringa alfanumericadove:

n specifica l’n-esima parola da estrarre, se n è negativo inizia dalla finedelimitatori definisce i caratteri che delimitano le parole,e può essere qualsiasi carattere o

insieme di caratteri se omesso sono:spazio . < (+|&!$*);-/,%^ per Windows e Unix

la variabile che viene creata è di 200 byte, se non é definita altrimenti.

|| oppure !! servono per concatenare le stringhe, lasciando però gli spazi presenti nelle stringhe

TRIM(stringa) toglie gli spazi finali, se missing mette uno spazioTRIMN(stringa) toglie gli spazi finali, se missing mette missingCOMPBL(stringa) toglie gli spazi ripetutiCAT(stringa1, …, strn) concatena le stringheCATT(stringa1, …, strn) concatena le stringhe, toglie spazi finali CATS(stringa1, …, strn) concatena le stringhe, toglie spazi finali e iniziali CATX(separatore, stringa1, …, strn) concatena le stringhe, toglie spazi finali e iniziali e inserisce i

separatoriFIND(dest,valore,modificatori,pos. Inizi.) cerca una stringa e ne restituisce la posizioneModificatori:

I indica se tenere conto o meno delle maiuscole/minuscoleT indica di ignorare gli spazi finali

pos. Inizi. da dove inizia la ricerca, se omesso inizia dall’inizio

INDEX(dest,valore) cerca una stringa e ne restituisce la posizione, se non trova da 0 (è key sensitive)UPCASE(stringa,”…”) converte tutto in maiuscoloLOWCASE(stringa,”…”) converte tutto in minuscoloPROPCASE(stringa,”…”) converte la prima lettera in maiuscolo e le altre in minuscoloTRANWRD(origine,dest,sostituzione) sostituisce o rimuove tutte le occorrenze di una data stringa

ROUND(argomento,<unità di arrotondamento>) arrotonda all’unita di arrotondamento più vicina, se non viene data l’unità all’intero più vicino

ROUND(argomento, oppure .1 oppure .01 oppure 10)CEIL(argomento) restituisce il numero intero più piccolo maggiore o uguale all’argomentoFLOOR(argomento) restituisce il numero intero più grande maggiore o uguale all’argomentoINT(argomento) restituisce la parte intera dell’argomento

SUM(argomento1, argomento2,… argomentoN) totale dei valoriMEAN(argomento1, argomento2,… argomentoN) media dei valoriMIN(argomento1, argomento2,… argomentoN) minimo dei valoriMAX(argomento1, argomento2,… argomentoN) massimo dei valori

5

Page 6: SAS Base Giglio

ConversionePremessa SAS converte automaticamente un valore alfanumerico in un valore numerico come:

l’assegnazione a una variabile numerica un operazione aritmetica il confronto logico con un valore numerico una funzione che accetta argomenti numerici

e viceversa, da numerico ad alfanumerico come: l’assegnazione a una variabile alfanumerica un operazione di concatenazione una funzione che accetta argomenti alfanumerici

L’istruzione WHERE non fa alcuna conversione.

INPUT(origine, formato-input); converte valori alfanumerici in valori numerici. La funzione non restituisce alcun messaggio di conversione nel log. Non si può usare il nome della variabile di origine per quella di destinazione.

EsempioDATA conversione;

var_alf1=’32000’;var_alf2=’32,000’;var_alf3=’03mag2008’;var_alf4=’050308’;var_num1=input(var_alf1,5.);var_num2=input(var_alf2,comma6.);var_num3=input(var_alf3,itadfde9.);var_num4=input(var_alf4,mmddyy6.);

RUN;

PUT(origine, formato); la funzione put converte da numerico ad alfanumerico

EsempioDATA conversione;

var_alf1=614;var_alf2=55000;var_alf3=366;var_num1=put(var_alf1,$3.);var_num2=put(var_alf2,eurox7.);var_num3=put(var_alf3,itadfde9.);

RUN;

PUT ’testo’; scrive il ‘testo’ sul logPUT var1=; scrive il var1=valore sul logPUT var1 formato; scrive il var1 con il formato indicato

EsempioPUT alfavar $quote20. scrive “ QUESTO” , il formato $quotew. scrive un formato

alfanumerico mantenendo gli spazi inizialiPUT _ALL_; scrive il valore di ogni variabile in questo modo: var1=valore sul logPUTLOG ’testo’; scrive il ‘testo’ sul log anche se è preceduta anche dall’istruzione FILELAG<n>(var1) permette di leggere dati da una posizione precedente (<n>) a quella attualmente

caricata nel PDV, se n è omesso allora è 1DIF<n>(var1) restituisce la differenza tra un argomento e il suo LAG<n>, se n è omesso allora è 1

Elenchi e convenzioni per più variabili nelle funzioni:elenchi d’intervalli numerati x1-xn specifica tutte le variabili da x1 a xn.elenchi d’intervalli nomi x--y specifica tutte le variabili da x a y incluse.

x-numeric-y specifica tutte le variabili numeriche da x a y.

6

Page 7: SAS Base Giglio

x-character-a specifica tutte le variabili alfanumeriche da x1 a xn.elenchi di prefissi di nomi sum (of RIC:) indica a SAS di calcolare la somma di tutte le variabili che iniziano con RICelenchi di nomi SAS _ALL_ tutte le variabili

_NUMERIC_ tutte le variabili numeriche_CHARACTER_ tutte le variabili carattere

Per la sintassi funzione(of var1-varn);

Costanti‘ddmmmyyyy’d definisco una data costante (es ‘14dec2000’d )

Condizioni e cicliLa struttura per impostare una condizione è:

IF condizione THEN istruzione ELSE condizione THEN istruzione ….

IF espressione THEN DO;… Istruzioni …

END;ELSE DO;

… Istruzioni …END;

IF condizione; è un if di estrazione che prende solo i valori veri per la condizione.

OPERATORI DI CONFRONTOEQ = ugualeNE <> diversoGT > maggioreLT < minoreGE >= maggiore o ugualeLE >= minore o ugualeIN ( …) uguale a un elenco

AND &OR |NOT ^

BETWEEN 1000 AND 2000;CONTAINS ? seleziona le osservazione che includono la sottostringa specificata.

LIKE ‘VALORE%’;% per un numero indefinito di caratteri _ per un solo carattere

SOUNDLIKE =* che contiene varianti ortografiche della parola.IS NULL or IS MISSING seleziona le variabile il cui valore e mancante

LOOP DOServono per :

eseguire calcoli ripetitivi

7

Page 8: SAS Base Giglio

generare dati eliminare codice ridondante eseguire codice SAS in base a condizioni

DO variabile=1 TO n <BY incremento>;

EsempiDO i=1 TO 12; un ciclo da 1 a 12DO g=2 TO 10 BY 2; un ciclo che segue la serie 2 4 6 8 10DO k=14 TO 2 BY -2; un ciclo che segue la serie 14 12 10 8 6 4 2DO m=3.6 TO 3.8 BY .05; un ciclo che segue la serie 3.6 3.65 3.7 3.75 3.8

DO variabile=elemento1 , … , elementon ;DO mese=’JAN’,’FEB’,’MAR’; 3 volteDO fib=1,2,3,5,8,13,21; 7 volteDO i=var1,var2,var3; 3 volteDO k=test1-test50; 1 volta!!! Fa la sottrazione!!

DO WHILE espressione; le istruzioni sono eseguite quando la condizione è vera<altre istruzioni>

END;

DO UNTIL espressione; le istruzioni sono eseguite quando la condizione diventa vera, comunque almeno una volta

END;

La differenza è se la condizione è controllata prima o dopo. Attenzione ai loop infinti per evitarli incrocio con il DO.

DO variabile=1 TO n <BY incremento>;WHILE | UNTIL espressione;<altre istruzioni>

END;

Si possono anche fare loop nidificati.

IMPORTAZIONE DATII dati grezzi con campi non in colonne fisse sono chiamati a formato libero. I delimitatori più comuni sono : spazi, virgole tabulazioni

INPUT var1 $ var n etc…

Per i dati standard, specificare un segno di dollaro, $, dopo il nome della variabile se é alfanumerica, nessun simbolo se è numerica. Il $ non occorre se la variabile è stata precedentemente definita come alfanumerica.

Per specificare un formato di input usare i :

DATA work.personale; INFILE ‘file-dati-grezzi’; /*Percorso su qual file puntare*/ INPUT Cognome $ 1-20 Nome $ 21-30 Qualifica $ 36-44 Stipendio 54-59;

/* oppure */ INPUT @1 cod_dip $5. @7 data_ass date9. @17 stipendio 5. ;

/* oppure */RUN;

8

Page 9: SAS Base Giglio

E’ possibile avere più istruzioni input per ogni singolo passo di data.

@ indice di riga# indice di colonna

INPUT VAR1 VAR2 VAR3 @ serve per bloccare il PDV e non mantiene il buffer dopo il run INPUT VAR1 VAR2 VAR3 @@ serve nel caso di input a lista (se usato in input per colonne genera

un loop infinito!!!) mantiene il buffer anche dopo il run.@ e @@ non vanno usate assieme e @@ non va messa con il MISSOVER.

DLM

INFILE ‘file-dati-grezzi’ DLM=’delimitatore’; Mi permette di definire il tipo di delimitatore del file input, può essere più di uno.

Esempio INFILE ‘file-dati’ DLM=’,’;

ATTENZIONEPer impostazione predefinita, se vi sono dati mancanti:

1. SAS legge il record successivo per completare la riga2. Viene scritta una nota nel log3. SAS legge la nuova riga e prosegue!

Per evitarlo usare l’opzione: MISSOVER che impedisce a SAS di leggere un nuovo record per completare i missing, e così i valori mancanti vengono lasciati missing.

MISSOVER consente a SAS di leggere record a lunghezza variabile senza cercare i campi missing nella riga successiva, ma lasciandoli missing.

TRUNCOVER indica a SAS di non leggere dalla riga successiva quando finisce i dati, ma di assegnare alla variabile quanto ha letto

/ serve per leggere il record successivo sulla stessa riga del file di import

PAD fa in modo che i file siano tutti della stessa lunghezza riempiendo di spazi quelli più brevi, va usata solo per i file di lunghezza variabile e non quelli a lunghezza delimitata.

Nel caso di due delimitatori consecutivi SAS li prende come un unico delimitatore, quindi i dati mancanti dovrebbero essere sempre segnati da un segna posto (. per i numerici e spazio per gli alfanumerici).

DSD delimitatore come virgola

Oppure usare l’opzione DSD che: imposta il delimitatore predefinito a una virgola tratta i delimitatori consecutivi come mancanti consente a SAS di non leggere delimitatori incorporati tra doppi apici

Per lettura di colonne e dati in formato standard: INPUT

Esempiodata work.dfwlax; INFILE ‘file-dati-grezzi’;

INPUT volo $ 1-3 data $ 4-11 dest $12-14 primaclasse 15-17 turistica 18-20;run;

Formato libero

9

Page 10: SAS Base Giglio

Quando non si hanno colonne fisse ma variabili separate da delimitatori.

Esempiodata work.partenze; INFILE ‘partenze.dat’;

INPUT volo $ data : itadfde9. dest :$3. primaclasse turistica;run;

il segno : segnala che SAS deve leggere da delimitatore a delimitatore.

Procedure e Data Step da conoscere____________________________________________________________________________

CONTENTS

PROC CONTENTS DATA=data-set-sas;RUN;

Mi da tutte le informazioni sulla parte descrittiva del data set.

PROC CONTENTS DATA=nome_libreria._ALL_ NODS;RUN;

Mi permette di stampare tutto il contenuto di una libreria e con l’opzione NODS non stampo la parte descrittiva. ______________________________________________________________________________

LIBNAME

Per creare una libreria nel percorso specificato.

LIBNAME nome_librerie ‘percorso’ <engine> <opzioni engine>;

esempiowindows, DOS e OS/2libname prog2 ‘c:\prog2’;

UNIXlibname prog2 ‘/user/prog2’;

z/OS OS/390 batch TSOlibname prog2 ‘/user/prog2’;

esempio

LIBNAME oralib oracle USER=edu001 utentePW=edu01 passwordPATH=dbnssrv specifica i driver, nome e il data base

… Altre opzioni …PRESERVE_TAB_NAME=yes/no mantiene spazi, caratteri speciali, minuscole e

maiuscole

10

Page 11: SAS Base Giglio

DBPROMPT=yes/no visualizza una finestra che richiede le informazioni per connettersi al DBMS

DEFER=yes/no determina quando avverrà la connessione se subito o all’apertura di una tabella nel DBMS.

… opzioni Oracle …SCHEMA=educ; specifica su quale schema lavorareBUFFSIZE=numero positivo intero

Specifica il numero di righe in un singolo recupero. Il valore predefinito è 250.

RUN;

… opzioni DB2 …LIBNAME db2lib db2

AUTHID=educ specifica id di autorizzazioneSSID=db2 ID sottosistemaSERVER=server specifica il serverROWSET_SIZE=numero positivo intero

Specifica il numero di righe in un singolo recupero. Il valore predefinito è 0, quindi non viene effettuata alcuna operazione di buffering SAS interna.

RUN;

La tecnologia Open Database Connectivity (ODBC): consente agli utenti di trasferire dati tra sistemi software compatibili. é stata sviluppata da Microsoft Corporation utilizza lo structured Query Language (SQL) come Application Programming Interface (API)

comune per comunicare direttamente con database proprietari. Ed è comune a tutti i principali DataBase.

… opzioni ODBC …LIBNAME xlsdata odbc dsn=payrollmaster; __________________________________________________________________________

OUTPUTL’istruzione OUTPUT esplicita scrive il contenuto del PDV in un data set SAS.IMPORTANTE: l’output implicito (RUN)viene ignorato e SAS aggiunge un’osservazione al data set solo con l’istruzione di output esplicita.

EsempioDATA previsione; DROP num_dip; SET prog2.crescita; anno=1; tot_nuovo=num_dip*(1+aumento); OUTPUT; /* Da in output il contenuto del PDV */ anno=2; tot_nuovo=num_dip*(1+aumento); OUTPUT; anno=3; tot_nuovo=num_dip*(1+aumento); OUTPUT;RUN;

Per scrivere su più data set basta aggiungere i nomi seguiti dallo spazio:OUTPUT data1 data2 etc ;

Esempio

11

Page 12: SAS Base Giglio

Data esercito marina aeronautica; drop tipo; set prog2.militari; if tipo eq ‘Esercito’ then

output esercito; else if tipo eq ‘Marina’ then

output marina; else if tipo eq ‘Aeronautica’ then

output aeronautica;run;

EsempioData esercito marina aeronautica; drop tipo; set prog2.militari; when (‘Esercito’) then output esercito; when (‘Marina’) then output marina; when (‘Aeronautica’) then output aeronatuica;

otherwise;end;

run;______________________________________________________________________________

PROC PRINT DATA=data-set-sas;RUN;

Visualizza i dati di un data-set SAS. Ed è possibile visualizzare:- Titoli e note a piè di pagina.- Intestazione di colonne descrittive.- Valori formattati.- Totali di colonna.- Sottototali di colonna.- Salti di pagina per gruppo.

Opzioni:VAR nome_variabile;Mi permette di selezionare le variabili da inserire e l’ordine delle stesse.Esempio

Proc print data=lai.dati_dip; var cod_lav cod_dip stipendio;

run;

NOOBS elimina i numeri di riga sul lato sinistro del prospetto.Esempio

Proc print data=lai.dati_dip noobs; var cod_lav cod_dip stipendio;

run;

WHERE permette di selezionare osservazioni che soddisfano una determinata condizione.Esempio

Proc print data=lai.dati_dip noobs; var cod_lav cod_dip stipendio;

where cod_lav=’PILOTA’;run;

SUM somma i totali di colonna e i sottogruppi nel caso di gruppi.

12

Page 13: SAS Base Giglio

EsempioProc print data=lai.dati_dip noobs;

var cod_lav cod_dip stipendio; sum stipendio;run;

ID per eliminare la colonna con il numero di osservazione e inserire la variabile/i da usare al suo posto.Esempio

Proc print data=lai.dati_dip noobs; id cod_lav;

var cod_lav cod_dip stipendio; sum stipen+dio;run;

BY per ordinare in base alle variabili;Esempio

Proc print data=lai.dati_dip noobs; by cod_lav;

var cod_lav cod_dip stipendio; sum stipendio;run;

Usando la stessa variabile per ID e BY:- la colonna Oss viene eliminata;- la riga by viene eliminata- la variabile ID/BY va nella colonna più a sinistra- il valore ID/BY viene stampato solo all’inizio di ogni gruppo

TITLE1 per inserire il titoloFOOTNOTE1 per inserire le note a pie di paginaFino a un massimo di 10 e in caso di istruzione senza titolo vengono annullati tutti.

LABEL assegna una descrizione a una colonna di max 256 caratteri.Esempio

Proc print data=lai.dati_dip noobs; Label cognome=’Cognome’ by cod_lav;

var cod_lav cod_dip stipendio; sum stipendio;run;

______________________________________________________________________________

FILE ‘c:\corsocb\winsas\prog1\mioprg.sas’; Salva il programma.

______________________________________________________________________________

PROC SORT

PROC SORT DATA=data-set-sas1 OUT=data-set-sas2; By <descending> variabili;RUN;Ordina le variabili di un data set, senza generare un output, dove in caso di valori mancanti sono considerati i più piccoliOpzioni:

SUM somma i totali di colonna e i sottogruppi nel caso di gruppi.

13

Page 14: SAS Base Giglio

EsempioProc sort data=data-step1;

by cod_lav; sum stipendio;run;

PAGEBY per mettere un salto di pagina dopo ogni sottogruppo.Esempio

Proc sort data=data-step1; by cod_lav;

pageby cod_lav; sum stipendio;run;

proc sort data = rapporti_dist_&banca._txt_prog_rapp out=rapporti_dist_&banca._txtnodupkey dupout=rapporti_dupl_2_&banca._txt;

by prog_rapp COD_RAPP;run;

nodupkey dupout= per creare una tabella con i duplicati

______________________________________________________________________________

DATA dataset3;SET dataset1 dataset2;BY var1; entrambi i data set sono ordinati per la variabile var1

RUN;Ovviamente i due dataset devono essere entrambi già ordinati sulla var1_____________________________________________________________________________

PROC DATA=data-set OUT=new data set NLEVELS(per includere il numero di livelli(strati?));TABLES var1 NOPRINT(non fa mostrare i conteggi); variabili da includere nella ricercaoppure

_ALL_ NOPRINT per visualizzare i livelli di tutte le variabili senza i conteggioppureTABLES var1 * var2 per calcolare la frequenza delle combinazionioppureTABLES var1 * var2 /CROSSLIST per visualizzare i risultati sottoforma di listato

/NOCUM per non visualizzare la colonna delle cumulate/SPARSE inserisce anche i dati missing e 0

TITLE ‘qua si inserisce il titolo’;RUN;______________________________________________________________________________

PROC MEANS DATA=data-set MAXDEC=n (per definire il numero di posizioni decimali volute):VAR var1 var2 definisce su quali variabili fare la ricercaCLASS var1 var2 raggruppa le osservazioni per l’analisi successive (che viene fatta per gruppi)Fornisce le seguenti statistiche:

N numero di righe con valori non mancantiMEAN media aritmeticaSTD deviazione standardMIN valore minimoMAX valore massimo

Posso richiedere anche:RANGE differenza tra il valore minimo e massimoMEDIAN valore del 50° percentile

14

Page 15: SAS Base Giglio

SUM totaleNMISS numero di righe con valori mancanti

RUN;______________________________________________________________________________ISTRUZIONE SOMMAL’istruzione di somma:

- crea la variabile a sinistra del segno più se ancora non esiste- inizializza la variabile a zero prima della prima iterazione del passo di data- mantiene automaticamente la variabile- aggiunge il valore dell’espressione alla variabile in fase di esecuzione- ignora i valori mancanti

EsempioData tot_mese2; set prog2.vend_giorno2; prgrmese+impvend;run;

______________________________________________________________________________

BY FIRST LAST per calcolare variabili di gruppoEsempio

DATA stip_reg_div (keep=regione div stipdiv num_dip); SET reg_ord; BY regione div; IF first.div THEN DO;

Stipdiv=0; * Azzero la variabile d’appoggio;Num_dip=0;

END; Stipdiv+stip; * L’incremento; Num_dip+1; IF last.div;RUN;

______________________________________________________________________________

PROC REPORTPrima del PROC REPORT bisogna settare (se si vuole) le options:

OPTIONSLS=n dimensione riga, numero massimo di caratteriPS=n dimensione pagina, numero massimo di righeNUMBER/NONUMBER se mettere o meno i numeri di paginaDATE/NODATE stampa o meno la data e l’ora d’inizio della sessionePAGENO=n reimposta la numerazione delle pagina dal numero nCENTER/NOCENTER specifica se l’ouput è centrato o giustificato a sinistraMISSING=’0’ per visualizzare i valori mancanti uguali a zero.

Per conoscere l’elenco delle opzioni usare la PROC OPTIONS SHORT/LONG; RUN;

PROC REPORT DATA = nome <opzioni> :HEADLINE sottolinea tutte le intestazioni delle colonne e gli spazi tra le stesseHEADSKIP lascia una riga vuota sotto all’intestazione di colonnaSPLIT = ’carattere di suddivisione’

Specifica il carattere di suddivisione tra le colonne e l’intestazione di norma è il /MISSING con questa opzione si include il valore di raggruppamento mancanti

15

Page 16: SAS Base Giglio

WINDOWS|WD chiama la procedura in una finestra report interattiva (predefinita)NOWINDOWS|NOWD visualizza il prospetto nella finestra di output

Creazione di prospettiOUTREPT=libref.catalogo.nome-prospetto.REPT;

L’entrata di catalogo specificata nell’opzione OUTREPT= deve avere un nome a tre livelli. Il quarto livello, REPT, viene aggiunto automaticamente.

LIST fa vedere sul log la definizione dei prospettiTITLEn ‘testo’ aggiunge il titolo FOOTNOTEn ‘testo’ aggiunge le note a piè pagina

COLUMN var1 var2 etc… definisco quali variabili voglio visualizzare nel report e con quale ordine

Var1, var2 in questo modo vengono sovrapposte le colonne e sommaVar1, var2, MEAN in questo modo non somma ma fa la media

DEST (‘ Intestazione che voglio mettere ‘ var1,var2);in questo modo inserisco una sovra intestazione sulle colonnevar1=alias_var1 in questo modo creo un alias che posso usare come colonna

aggiuntiva del proc report var1, (var2 var3) per raggruppare più variabili sotto una variabile

DEFINE var1 <utilizzo> <attributi> per definire come voglio visualizzare la var1, assegnare formati e definire l’aspetto della colonna

DISPLAY stampa il valore come sono del data setORDER ordina la visualizzazione per la variabile (DESCENDING se vogliamo che

ordini decrescente) (deve però precedere le altre colonne)Può anche essere:ORDER=DATA ordinamento del data set di inputORDER=FORMATTED valore formattato crescenteORDER=FREQ conteggio della frequenza crescenteORDER=INTERNAL valore non formattato

Posso anche definire le seguenti statistiche:SUM somma le variabili in base a come ho definito i gruppiN numero di righe con valori non mancantiMEAN fa la media sulle variabile in base a come ho definito i gruppiMIN valore minimoMAX valore massimo

GROUP consolida in una riga tutte le variabili che hanno lo stesso valoreACROSS forma intestazioni delle colonne in orizzontale nella parte superiore del

prospetto con i valori della variabileFORMAT = assegna il formato alla colonnaWIDTH = larghezza della colonnaCENTER/LEFT/RIGHT la giustificazione del testo nella colonnaSPACING numero di spazi a sinistra della colonnaNOPRINT non visualizza la colonnaFLOW manda a capo il valore di una variabile in orizzontale su più righe‘intestazione colonna’ sostituisco il nome del variabile con l’intestazioneN / ‘Totale’ oppure MEAN /’Media’ (aggiungendo N o MEAN a column)

Questo ci da la possibilità di creare una colonna che contenga le tale statistica per ogni riga del prospetto.

16

Page 17: SAS Base Giglio

COMPUTED colonna calcolata su valori di altri variabili (va anche messa nell’istruzione COLUMN )

E in fondo alla proc mettere:COMPUTE variabile calcolata <specifica tipo>;

… Segmento codice …ENDCOMP;

per mettere un commento nella riga di interruzione:COMPUTE AFTER; DEST=’Testo che voglio inserire’;ENDCOMP;

BREAK before/after var1 <opz..> spezza dopo il cambio del valore del var1 che deve essere una variabile di ordinamento o raggruppamento

RBREAK before/after var1 <opz..> spezza dopo il cambio del valore del var1 che deve essere una variabile di ordinamento o raggruppamento e aggiunge un totale generale al prospetto

Le possibili opzioni sono:DOL sopralinea due volte scrivendo una riga di segni di uguale (=) sopra ciascun

carattereDUL sottolinea due volte scrivendo una riga di segni di uguale (=) sotto ciascun

carattereOL sopralinea scrivendo una riga trattini (-) sopra ciascun carattere nella riga di

sintesiPAGE inizia una nuova pagina dopo ogni gruppo di linee di interruzioneSKIP scrive una riga vuota dopo ogni gruppo di linee di interruzioneSUMMARIZE scrive una riga di sintesi per le statistiche e le variabili calcolate in ogni

gruppo di righe di interruzioneSUPPRESS elimina la stampa del valore della variabile d’interruzione e di qualsiasi

sottolineatura o sopralineatura della colonna della variabile d’interruzione nelle righe d’interruzione (valida solo per l’istruzione)

UL sottolinea scrivendo una riga trattini (-) sopra ciascun carattere nella riga di sintesi

RUN;______________________________________________________________________________

ODSLe istruzioni ODS consentono di creare output in forme diverse.

ODS CSVALL crea un file con virgole come delimitatori con le seguenti caratteristiche: i valori di dati sono racchiusi tra doppi apici titoli e note a piè pagina sono mantenuti

FILE ’percorso e file’ <opzioni>; crea un file esterno

FILENAME fileref <tipo-periferica> ‘file-esterno’ <opzioni-host>

fileref specifica un nome SAS<tipo-periferica> specifica il tipo di periferica o metodo d’accesso‘file-esterno’ nome fisico del file esterno<opzioni-host> opzioni

17

Page 18: SAS Base Giglio

PUT variabile1 variabile2 variabile3; scrive righe nel file esterno specificato nell’ultima istruzione file

PUT variabile1 formato1variabile2 formato2variabile3 formato3;

PROC FSLIST fileref=specifica-file <opzioni(i)> mi serve per visualizzare il file per capire com’è meglio importarlo.

File HTMLPer creare un output su HTML si usa l’istruzione di ODS prima della creazione del report come da esempio:

ODS HTML FILE=’percorso e file.html’ <opzioni>;… codice SAS …

CONTENTS=’nome_file’ contiene collegamenti a singole parti dell’output contenute nel body file HTML

PAGE=’nome_file’ contiene collegamenti a singole pagine dell’output contenute nel body file HTML

FRAME=’nome_file’ integra il sommario, il contenuto delle pagine e il body file HTML

… PROC PRINT…… PROC MEANS …… PROC FREQ …… PROC REPORT DATA=…… ;

…..…..

RUN;

ODS HTML CLOSE;

ODS HTML FILE=’percorso\nome_file.html’ style=’stile dei risultati’

ODS LISTING CLOSE se indirizzi l’output verso formati esterni usi prima di ods “formato” per evitare output SAS proprietario.

ODS LISTING da usare per riaprire l’output.

Apertura e chiusura fileSe ODS HTML FILE=’percorso e file.html’ <opzioni>;allora ODS HTML CLOSE;

Se ODS PDF FILE=’percorso e file.html’ <opzioni>;allora ODS PDF CLOSE;

Se ODS RTF FILE=’percorso e file.html’ <opzioni>;allora ODS RTF CLOSE;

Oppure generico ODS _ALL_ CLOSE;

ArrayE’ possibile utilizzare ARRAY per semplificare i programmi che:

eseguono calcoli ripetitivi creano numerose variabili con gli stessi attributi leggono dati

18

Page 19: SAS Base Giglio

ruotano data set SAS trasformando le variabili in osservazioni o viceversa. Confrontano variabili Effettuano un table lookup

Un ARRAY è un raggruppamento temporaneo di variabili SAS, esiste solo durante il passo di data e non è una variabile.

ARRAY nome-array {indice} <$><lunghezza><elementi array><(Elenco valori iniziali)>;

{indice} descrive il numero e la disposizione degli elementi nell’array utilizzando un asterisco, numero o intervallo di numeri. E indica il numero di elementi dell’array o del numero di elementi dell’array multidimensionale.

<$> se presente l’array è alfanumerico

<lunghezza> specifica la lunghezza degli elementi dell’array se non già precedentemente definiti

<elementi array> indica gli elementi che costituiscono l’array

<(Elenco valori iniziali)> indica i valori iniziali degli elementi corrispondenti dell’array

L’istruzione ARRAY : deve avere elementi omogenei o numerici o alfanumerici serve per definire un array prima che si possa utilizzare crea le variabili se non già presenti nel PDV è un istruzione utilizzata in fase di compilazione

EsempioARRAY contrib2 {4} t1 trms2 terzot tr4;

DO variabile indice=1 TO numero elementi array;altre istruzioni SAS …nome array (variabile indice)

END;

Se non si vuole tenere la variabile indice dropparla alla fine del passo di data oppure la definisco _TEMPORAY_

EsempioARRAY contrib{4} tr1 tr2 tr3 tr4;DO pippo=1 TO 4;

cotrib{pippo}=contrib{pippo} *1.25;END;

EsempioDATA percentuale (drop=pippo);

SET prog2.versato;Totale=sum (of tr1-tr4);ARRAY contrib{4} tr1-tr4;ARRAY percent{4}DO pippo=1 TO 4;

percent {pippo} =contrib {pippo} totale;END;

RUN;

19

Page 20: SAS Base Giglio

La seconda istruzione ARRAY crea 4 variabili numeriche.

In caso di erroreQuando SAS rileva un errore nei dati:

1. Una note che descrive l’errore viene stampata nel log SAS.2. Il record di input letto viene visualizzato nel log SAS (Contenuto nel buffer di input).3. I valori dell’osservazione SAS creata vengono visualizzati nel log SAS (contenuto nel PDV )4. Un valore missing viene assegnato alla variabile SAS appropriata.5. l’esecuzione prosegue.

DATA data-set / DEBUG; attiva il debugComandi:

STEP invio scorre il programma un istruzione alla voltaEXAMINE E var1 visualizza il valore della variabileWATCH W var1 sospende l’esecuzione quando cambia il valore della variabileLIST WATCH L W elenca le variabili che sono sottocontrollo QUIT Q interrompe l’esecuzione del passo di data

_ALL_ per vedere tutte le variabili

20

Page 21: SAS Base Giglio

NON IN ESAME______________________________________________________________________________

PROC DATASETS LIBRARY=libreria_di_riferimento;MODIFY nome del data set;RENAME vecchio_nome_data_set=nuovo_nome;LABEL variabile1=’descrizione1’

Variabile2=’descrizione2’ etc…

FORMAT elenco variabili1 format1 elenco variabili2 format2 etc…

INFORMAT elenco variabili1 format1 elenco variabili2 format2 etc…

RUN;______________________________________________________________________________

PROC IMPORT OUT=WORK.dfwlax;DATAFILE = “C:\corsocb\winsas\prog1\DallasLA.xls”

DBMS=EXCEL REPLACE (sovrascrive un data set esistente)SHEET = “DFWLAX”; (Nome dello specifico foglio che voglio sia letto)GETNAME=YES; (Cerca di prendere i nomi delle variabili dalla prima riga del file)MIXED=NO; (Converte i valori numerici di una colonna avente dati misti in alfanumerici

di default sarebbe no)SCANTEXT=YES; prende il valore della stringa più lunga come lunghezza SCANTIME=YES; cerca dei valori data nelle righeUSEDATE=YES/NO per far importare le date con il formato data di SAS o meno

che usa il formato datetime19RUN;

PROC SUMMARYPROC SUMMARY DATA=data-set;

CLASS variabile di raggruppamento;VAR variabile analisi;OUTPUT OUT = new data-set

SUM = nome variabile create dalla statistica MEAN = nome variabile create dalla statistica; Ci vuole una nome per le variabili statistic per ogni variabile di analisi

RUN;

Non produce nessun output stampato e statistiche per tutte le variabili numeriche.

Fornisce le seguenti statistiche:N numero di righe con valori non mancantiMEAN media aritmeticaSTD deviazione standardMIN valore minimoMAX valore massimo

21

Page 22: SAS Base Giglio

Ma può anche calcolare: MEDIAN, P1, P5, P10, P90, P95, P99, Q1, Q3, QRANGE

Opzioni aggiuntive:

TYPES var1*var2 var1*var3; Specifica quali combinazioni di variabili mi interessanoOppure

var1*(var2 var3); La stessa cosa scritta in altro modo

WAYS 1 2; Include una variabile di nome _WAY_, che contiene un numero da 1 al massimo numero di variabili di classe che la PROC usa.

Es WAYS 1 2 var1 var2 var3; incrocia nel modo seguente: var1*var2 var1*var3 var2*var3

CHARTYPE; Specifica che la colonna _TYPE_ contiene valori alfanumerici PRINTIDVARS; Stampa il valore delle colonne ID in un prospetto.

CLASS=INTERNAL | FORMATTED | DATA | FREQSpecifica la sequenza di ordinamento per i livelli delle variabili di classificazione nell’output.

DESCENDING per mettere l’ordinamento decrescenteMISSING considera i valori mancanti come livelli validi delle variabili di

classificazioneGROUPINTERNAL specifica di non applicare formati alle variabili di classificazione, utile per i

valori numerici discretiL’istruzione VAR supporta la seguente opzione: WEIGHT= specifica variabili di peso diverse

AUTONAME risolve i conflitti nei nomi creando delle serie nome1 nome2 etc…IDGROUP MIN|MAX crea valori estremi nella tabella OUT=

______________________________________________________________________________

PROC MEANSPROC MEANS DATA=data-set NOPRINT;

VAR variabile analisi;CLASS variabile di raggruppamento;OUTPUT OUT=new data-set STATISTIC=nome variabile create dalla statistica;

Ci vuole una nome per le variabili statistic per ogni variabile di analisiRUN;______________________________________________________________________________

Combinazione data setDATA data-set; Concatenazione non ordinata

SET data-set1 data-set1 … data-setn; RUN;

DATA data-set; Concatenazione ordinataSET data-set1 data-set1 … data-setn; BY variabile/i d’ordinamento;

RUN;

DATA data-set; Concatenazione ordinata con if sulla provenienzaSET data-set1 (in=pippo) data-set1 … data-setn; BY variabile/i d’ordinamento; IF pippo oppure IF pippo=1…..;

RUN;

22

Page 23: SAS Base Giglio

DATA data-set; combinazione ordinata MERGE data-set1 data-set1 … data-setn; BY variabile/i d’ordinamento;

RUN;

Proc SQLLa PROC SQL consente di:

unire tabelle e generare un prospetto in un solo passo unire tabelle senza dati ordinati utilizzare criteri di associazione complessi

Restituisce un prospetto e non un tabella. In generale la PROC SQL richiede una maggiore quantità di tempo CPU e di memoria rispetto a un passo di data.

PROC SQL;CREATE TABLE nome AS crea la tabellaSELECT alias1.var1, alias2.var1, …, varn selezione delle variabili (* per prenderle tutte)FROM data-set1 AS alias1, data-set2 AS alias2, … data-setn data set WHERE alias1.var1=alias2.var1 condizione;

QUIT;

INNER JOIN per creare una tabella dall’intersezione di due tabelle

Proc FormatI formati possono essere di tipo :

valore che definiscono valori numerici o alfanumerici immagine per creare schemi input per controllare la lettura e memorizzazione dei valori

I valori mancanti si possono definire ‘ ‘ o .Posso usare parole chiave:

OTHER per indicare tutti i valori non specificatamente indicatiHIGH per il valore numerico più altoLOW per il valore numerico più basso

PROC FORMAT LIBRARY=libreria-formati.nome-catalogo per definire formati permanentiVALUE $fmtalfa ‘valore1’=’valore formattato 1’

‘valore2’=’valore formattato 2’…‘valoren’=’valore formattato n’;

VALUE $fmtnum valore1=valore formattato 1valore2=valore formattato 2…valoren=valore formattato n;

VALUE $fmt… (MULTILABEL) per definire formati con più etichette possibili…. ;

RUN;

I nomi dei formati non possono essere ovviamente uguali ai formati SAS. Devono iniziare con il $, essere al massimo di 8 caratteri, sono memorizzati come entrate in cataloghi.

Se non metto LIBRARY=libref. i formati sono creati nella work e durano solo per la sessione SAS.

23

Page 24: SAS Base Giglio

Per utlizzare formati permanenti o ricercare in più cataloghi uso:OPTIONS FMTSEARCH=(catalogo1 catalogo2 … catalogon);

PROC CATALOG CATALOG=libreria-formati.CATALOG; per definire un catalogoCONTENTS <OUT=data-set> <FILE=fileref>;COPY OUT=<libreria-formati.>CATALOG ;

SELECT entrata1…n;EXCLUDE entrata1…n;

DELETE entrata1…n;RUN;

QUIT;

EsempioPROC FORMAT LIBRARY=prog2.FORMATS

VALUE $ROTTE ‘Rotta1’=’Zona 1’‘Rotta2’-‘Rotta4’=’Zona 2’‘Rotta5’-‘Rotta7’=’Zona 3’‘ ‘=’Mancante’ OTHER=’Sconosciuta’;

RUN;PROC CATALOG CATALOG cat=prog2. FORMATS

CONTENTS;RUN;

E nel programma aggiungo:OPTIONS FMTSEARCH=(prog2);

PROC FORMAT LIBRARY=libreria-formati.nome-catalogo per definire formati da un data setCNTLIN= data-set;

RUN;il data-set CNTLIN:

deve contenere le variabili FMTNAME, START e LABEL se è alfanumerico deve contenere la variabile TYPE o iniziare con il $ se non crea una variabile END si assume che sia uguale alla START

PROC FORMAT LIBRARY=libreria-formati.nome-catalogo per documentare un catalogoFMTLIB= data-set;<alter istruzioni>;

RUN;

PROC FORMAT LIBRARY=libreria-formati.nome-catalogo per definire un data-set da un formatoCNTLOUT= data-set;SELECT <$>nome formato;

RUN;

Proc TabulateServe per creare prospetti di sintessi a una a tre dimensioni. In cui si possono calcolare le seguenti statistiche:

N numero di righe con valori non mancantiSUM sommaMEAN media aritmeticaVAR varianza

24

Page 25: SAS Base Giglio

STD deviazione standardMIN valore minimoMAX valore massimoRANGE intervallo

PROC TABULATE DATA=data-set <opzioni>;CLASS variabili di classificazione;

VAR variabili di analisi;TABLE espressione-pagina, 1° dimensione

espressione-riga, 2° dimensioneespressione-colonna <opzione> ; 3° dimensione

Con la TABLE si definisce la struttura e il formato della tabella, con le seguenti convenzioni:, separa le dimensioni di una tabella* incrocia elementi di una dimensioneSpazio concatena elementi di una dimensione() raggruppa elementi e associa un operatore a un gruppo= assegna la descrizione a una variabile o una statisticaALL crea una nuova colonna/riga con il totale per riga/colonna (a seconda della

dimensione in cui è inserita)RUN;

FORMAT= serve per definire un formato per le celle della tabella, sì può usare qualisiasi formato sas valido

LABEL serve per definire un etichetta per le variabili di classificazione ed analisiKEYLABEL permette di sostituire un’etichetta a ciascuna parola chiave utilizzata nella tabellaRTS= nell’istruzione TABLE consente di impostare un valore numerico intero, che indica il

numero di posizioni disponibili per i titoli di riga. (Predefinito un quarto del LINESIZE)INDENT= nell’istruzione TABLE consente di specificare un numero di spazi di cui rientrare ciascun

livello di incrocio di rigaMISSING indica che i valori mancanti devono essere considerati come livelli validi per l variabili di

classificazionePRINTMISS richiede che siano stampate le righe e colonne per i valori mancantiMISSTEXT consente di indicare fino a venti caratteri che verranno stampati nelle celle con valori

missingNOSEPS elimina le linee separatrici orizzontali della tabellaOUT= serve per creare una tabella di output

EsempioPROC TABULATE DATA=prog2.piloti FORMAT=dollarz10.;

WHERE cod_lav ? ‘PT’;CLASS sesso cod_lav;VAR stipendio;TABLE cod_lav * sesso, stipendio= ‘ ‘ * (mean min max) rts=15 indent=3;FORMAT sesso $sesso. Cod_lav $codice.;KEYLALBEL MEAN=’Stipendio medio’

MIN=’Stipendio minimo’MAX=’Stipendio massimo’;

RUN;

Proc GchartPROC GCHART DATA=data-set; serve per creare grafici

HBAR variabile da rappresentare <opzioni>; grafico a barre orizzontaliVBAR variabile da rappresentare <opzioni>; grafico a barre verticaliPIE variabile da rappresentare <opzioni>; grafico a torta

25

Page 26: SAS Base Giglio

Opzioni:/DISCRETE per far si che le variabili numeriche non siano rappresentate in

maniera continua ma in maniera discreta/SUMVAR=variabile di analisi fa la somma o la media incrementale delle variabile/TYPE=MEAN|SUM specifica che si rappresenta una media o una somma/FILL=S|X specifica nel caso di grafico torta se riempire (S) o tratteggiare(X) il

grafico/EXPLODE=’PILOTA3’ serve per evidenziare una singola fetta da un grafico a tortaRUN;

QUIT;

PROC GCHART supporta l’elabroazione di più istruzioni per singola PROC

GOPTIONSGOPTIONS è un opzione globale per definire la periferica grafica, una volta sottomessa rimane attiva per

l’intera sessione (ovviamente va messa prima della PROC GCHART )Possibili valori:

DEV=HPD Hp Deskjet PrinterDEV=HPL Hp Laserjet PrinterDEV=GIF Gif DriverDEV=TK1 Tektronix DriverDEV=PDF Portable DocumentDEV=PSL PostScript DriverDEV=WMF Windows Metafile Driver

Per l’elenco completo vedere il catalogo sashelp.device

TITLE FOOTNOTE per aggiungere titoli o note a piè paginaCOLOR= per definire il colore del testo che segue l’opzioneFONT= per definire il tipo di carattere del testo che segue l’opzione

(Ad esempio DUPLEX, SIMPLEX, BRUSH e SPECIAL)HEIGHT= per definire l’altezza dei caratteri del testo che segue l’opzione

Per l’elenco completo vedere il catalogo sashelp.device

GPLOT

PROC GPLOT DATA=data-set; serve per rappresentare l’andamento tra due variabiliPLOT variabile-orizzontale* variabile-verticale /<opzioni>;SYMBOL1 opzione; per definire come voglio rappresentato il mio grafico, può essere un opzione …. globale o aggiuntivaSYMBOLn opzione;L’opzione può essere:

VALUE=simbolo|V=simbolo è possono essere: PLUS, STAR,SQUARE,DIAMOND TRIANGLE NONE

I=interpolazione serve per tracciare lineeJOIN unisce punti con linee retteSPLINE unisce punti con una linea curvaNEEDLE traccia linee verticali dai punti degli assi

WIDTH=lunghezza|W=lung. per definire lo spessore della lineaCOLOR=colore|C=colore per definire il colore della lineaSYMBOL; elimina l’ultima istruzione SYMBOL

GOPITONS RESET=SYMBOL; elimina tutte le istruzioni SYMBOL

26

Page 27: SAS Base Giglio

Le opzioni possibili sono/HAXIS=valori dimensione dell’asse orizzontale/VAXIS=valori dimensione dell’asse verticale/CAXIS=valori colore degli assi/CTEXT=valori colore del testo sugli assi

RUN;QUIT;

è possibile: specificare i simboli per rappresentare i dati utilizzare metodi d’interpolazione specificare stili, colori e spessori tracciare linee di riferimento per gli assi posizionare una o più linee di riferimento all’interno degli assi

Stili ODSSTYLE=(attribute1=valore1 … attributen=valoren); serve per cambiare l’aspetto dei prospetti

Gli attribute possono essere:BACKGROUND=colore per cambiare il colore dello sfondoFOREGROUND=colore per cambiare il colore del primo pianoFONT_FACE=stile times, helvetica, curierFONT_SIZE=larghezza 8pt, 9pt, 10pt, 11pt, 12ptFONT_STYLE=stile italic, romanFONT_WEIGHT=peso bold, mediumFONT_WIDTH=spessore narrow, wide

Utilizzo degli stili con la proc reportE’ possibile utilizzare l’opzione STYLE (COMPONENT)=(ATTRIBUTE=valore) in istruzioni:PROC REPORTDEFINEBREAKCOMPUTERBREAK

COMPONENTE ALCUNI ATTRIBUTI UTLIZZO DELL’ATTRIBUTO

PROSPETTO CELLPADDING Quantità di spazio vuoto su ogni lato del testo

OUTPUTWIDTH Ampiezza della tabella HTMLJUST Allineamento

INTESTAZIONE BACKGROUND Colore dello sfondoFOREGROUND Colore del testoFONT_WEIGHT Medium, BoldJUST Center, Left, Right

COLONNA BACKGROUND Colore dello sfondoFOREGROUND Colore del testoFONT_WEIGHT Center, Left, RightJUST Center, Left, Right

RIEPILOGO BACKGROUND Colore dello sfondoFOREGROUND Colore del testo

Esempio

27

Page 28: SAS Base Giglio

ODS HTML PATH=’C:/’ (url=none) BODY=’report1.html’;ODS LISTING CLOSE;FOOTNOTE;

PROC REPORT DATA=PROG2.ASSVOLO NOWDSTYLE(report) = [JUST=left OUTPUTWITH=50%]STYLE(header) = [BACKGROUND=cyan]STYLE(column) = [FOREGROUND=blue BACKGROUND=white]

TITLE ‘Informazioni sugli assistentidi volo’;COLUMN cod_lav sesso stip_annuo;DEFINE cod_lav /GROUP;

STYLE(header) = [JUST=center FOREGROUND=magenta BACKGROUND=pink]STYLE(column) = [JUST=left FONT_FACE=helvetica]

DEFINE sesso /GROUP;STYLE(header) = [JUST=center

FONT_FACE=times FONT_WEIGTH=bold BACKGROUND=yellow]

STYLE(column) = [JUST=left FONT_FACE=courier FONT_SIZE=4 FOREGROUND=very dark blueBACKGROUND=yellow]

DEFINE stip_annuo /SUM;STYLE(header) = [JUST=center

FONT_WITDH=narrow]STYLE(column) = [JUST=right

FONT_WITDH=narrow]RUN;ODS HTML CLOSE;ODS LISTING;

Altro

Eichhorn

http://www.milanofinanza.it/giornali/dettaglio_giornali.asp?preview=false&id=1563013&codiciTestate=8

APPUNTICharmap x caratteri speciali Copia pag.45-47 SAS 2

  Se fai girare su DI il passo di data:

28

Page 29: SAS Base Giglio

data

_NULL_;

a=pathname("work");

put

a=;

run;

 

poi vai sul log, copi l’indirizzo fisico che ti ha messo li e lo incolli al posto di

<path> nel seguente codice da eseguire (con F3, non F12) sulla sessione di sas base con cui sei sul server:

 

rsubmit;

libname

www "<path>";

endrsubmit;

 

libname

www slibref= www server=serv;

29

Page 30: SAS Base Giglio

 

ottieni che riesci a mapparti la libreria di work del DI e puoi guardare tutto quello  che succede.

 

Ciao

 

       Mauro

30