LA GESTIONE DELLE DATE E DEI TEMPI. i formati delle date accettati in INPUT



Documenti analoghi
GESTIONE DEGLI ARCHIVI

Istruzioni condizionali. Istruzioni condizionali IF-THEN- ELSE IF-THEN-ELSE. Statistica computazionale Carla Rampichini a.a.

Funzioni in C. Violetta Lonati

I file di dati. Unità didattica D1 1

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Matlab: Strutture di Controllo. Informatica B

Le stringhe. Le stringhe

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

Potenzialità statistiche Excel

La Stampa Unione. Individuare la lista indirizzi per la Stampa Unione

L utility Unix awk [Aho-Weinberger-Kernighan]

Appendice I. Principali procedure ed istruzioni per la gestione di files, l'analisi statistica di tipo descrittivo e la correlazione semplice

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

APPUNTI SUL LINGUAGGIO DI PROGRAMMAZIONE PASCAL

EXCEL FUNZIONI PRINCIPALI

8.9 CREARE UNA TABELLA PIVOT

ESERCIZI DI PROBLEM SOLVING E COMPOSIZIONE DEI DIAGRAMMI DI FLUSSO per le classi terza

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

FORMULE: Operatori matematici

4 3 4 = 4 x x x 10 0 aaa

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008

Access. Microsoft Access. Aprire Access. Aprire Access. Aprire un database. Creare un nuovo database

Le variabili di Visual Basic consentono di memorizzare temporaneamente valori durante

DAL DIAGRAMMA AL CODICE

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

Allocazione dinamica della memoria - riepilogo

Introduzione alla programmazione in C

Richiesta pagina PHP (es: index.php)

Giovanna Rosone 04/03/ /03/2010 SQL, Istruzioni per la modifica dello schema

Procedure memorizzate SQL-2003/PSM. Forma base di PSM. Parametri in PSM

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014

Soluzione dell esercizio del 2 Febbraio 2004

Formattazione e Stampa

GESTIONE INFORMATICA DEI DATI AZIENDALI

Uso delle basi di dati. Informazione e dato. Cos è un database. Tabelle. Esempi di database

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

Operazioni di input e output in Fortran 90

Algoritmi di Ricerca. Esempi di programmi Java

Variabili e tipi di dato

Arduino: Programmazione

Basi di dati 9 febbraio 2010 Compito A

INFORMATICA - I puntatori Roberta Gerboni

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Esempio: dest = parolagigante, lettere = PROVA dest (dopo l'invocazione di tipo pari ) = pprrlogvgante

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Appunti sulla Macchina di Turing. Macchina di Turing

LABORATORIO DI PROGRAMMAZIONE EDIZIONE 1, TURNO B

Gestione dei File in C

GESGOLF SMS ONLINE. Manuale per l utente

3. La sintassi di Java

GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

BMSO1001. Virtual Configurator. Istruzioni d uso 02/10-01 PC

NOZIONI BASE SHELL E SCRIPT LINUX

Manuale Utente Albo Pretorio GA

A destra è delimitata dalla barra di scorrimento verticale, mentre in basso troviamo una riga complessa.

Introduzione al Linguaggio C

Inizializzazione, Assegnamento e Distruzione di Classi

5.3 TABELLE RECORD Inserire, eliminare record in una tabella Aggiungere record Eliminare record

ARCHIVIAZIONE DOCUMENTI

Concetto di Funzione e Procedura METODI in Java

Il sofware è inoltre completato da una funzione di calendario che consente di impostare in modo semplice ed intuitivo i vari appuntamenti.

Linguaggio C - Stringhe

ESEMPIO 1: eseguire il complemento a 10 di 765

RISOLUTORE AUTOMATICO PER SUDOKU

Algoritmi e strutture dati. Codici di Huffman

SISTEMI DI NUMERAZIONE E CODICI

Laboratorio di Informatica

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)

Gestione di Dispobox Istruzioni

La struttura dati ad albero binario

Capitolo Quarto...2 Le direttive di assemblaggio di ASM Premessa Program Location Counter e direttiva ORG

Funzioni. Il modello console. Interfaccia in modalità console

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO XI.2015

Progetto: ARPA Fonte Dati. ARPA Fonte Dati. Regione Toscana. Manuale Amministratore

Compilatore risorse display grafico LCD serie IEC-line

MODULO 5 ACCESS Basi di dati. Lezione 4

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati

Prof. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base:

METODI per effettuare previsioni con analisi di tipo WHAT-IF

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Guida Compilazione Piani di Studio on-line

LINGUAGGI DI PROGRAMMAZIONE

Manuale operatore per l utilizzo dell utente di dominio

ROM Upgrade Utility (RUU) Prima dell aggiornamento fare attenzione se

Prof. Nicola Cappuccio

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

Manuale Knowledge Base

Capitolo Grafico dinamico

dall argomento argomento della malloc()

Tabelle Pivot - DISPENSE

Obiettivi del corso. Creare, modificare e formattare un semplice database costituito da tabelle, query, maschere e report utilizzando Access 2000.

Breve riepilogo della puntata precedente:

Archivio CD. Fondamenti di Programmazione

Introduzione al MATLAB c Parte 2

Transcript:

LA GESTIONE DELLE DATE E DEI TEMPI La data è una stringa che viene utilizzata per calcoli e, quindi, deve avere una rappresentazione interna di un numero. Le regole convenzionale per la lettura delle date e tempi sono: DATA = numero giorni dal 1/1/1960 TEMPO = numero secondi dalla mezzanotte ( max 86400 ) DATA-TEMPO = numero secondi dalla mezzanotte del 1/1/1960 i formati delle date accettati in INPUT TRASFORMANO LE STRINGHE IN VARIABILI NUMERICHE Formato DDMMYYc. MMDDYYc. YYMMDDc. Legge giorno mese anno mese giorno anno anno mese giorno YYMMDDc. Accetta anche anni espressi con 4 cifre DATA ESDATE; INPUT GIORNO DDMMYY8.; CARDS ; 010186 01 1 86 1 1 86 01/01/86 01-01-86 01 01 86 RUN;

i formati dei tempi e delle date-tempi accettati in INPUT Formato Legge TIMEc. ore : minuti : secondi : centesimi di secondo ( hh:mm:ss:cc ) esempio: 12:00 (TIME5.) 12:00:00 (TIME8.) 12:00:00:0 (TIME:10) DATETIMEc. 2 cifre del giorno ( gg ) 3 lettere del mese in inglese ( mmm ) 2 o 4 cifre dell'anno ( aa o aaaa ) spazio o carattere speciale ore : minuti : secondi : centesimi di secondo ( hh:mm:ss:cc ) Oltre alle costanti numeriche e non numeriche esistono in SAS anche le costanti di data, tempo e data-tempo. Tali costanti possono essere espresse con: data tempo data-tempo ggmmmaad hh:mm:ss.ct ggmmmaahh:mm:ss.cdt ggmmmaaaad

INPUT CODLIBRO PRESTITO DDMMYY6. +1 RITORNO YYMMDD8. ; RITARDO = RITORNO - PRESTITO ; IF RITORNO GT '31DEC1987'D AND RITARDO GT 30 ; CARDS; 1000 270887 87 12 30 1100 301187 88-01-05 1200 250787 88/01/10 1300 271287 19880115 PROC PRINT NOOBS SPLIT = ' # ' ; TITLE 'ESEMPIO DI SCRITTURA DI DATE NON FORMATTATE' LABEL CODLIBRO ='CODICE #LIBRO'; LABEL PRESTITO ='DATA DEL#PRESTITO'; LABEL RITORNO ='DATA DELLA#RESTITUZIONE'; LABEL PRESTITO ='GIORNI DI#RITARDO'; RUN; ESEMPIO DI SCRITTURA DI DATE NON FORMATTATE CODICE DATA DEL DATA DELLA GIORNI DI LIBRO PRESTITO RESTITUZIONE RITARDO 1100 10195 10231 36 1200 10067 10236 169 PROC PRINT NOOBS SPLIT = ' # ' ; FORMAT PRESTITO RITORNO DDMMYY8. ; TITLE 'ESEMPIO DI SCRITTURA DI DATE FORMATTATE' LABEL CODLIBRO = 'CODICE #LIBRO'; LABEL PRESTITO = 'DATA DEL#PRESTITO'; LABEL RITORNO = 'DATA DELLA#RESTITUZIONE'; LABEL PRESTITO = 'GIORNI DI#RITARDO'; RUN; ESEMPIO DI SCRITTURA DI DATE FORMATTATE CODICE DATA DEL DATA DELLA GIORNI DI LIBRO PRESTITO RESTITUZIONE RITARDO 1100 30/11/87 05/01/88 36 1200 25/07/87 10/01/88 169 Ci sono anche funzioni specializzate per la gestione delle date e dei tempi Nell ipotesi che il programma sia stato eseguito il 24 febbraio 1987 alle ore 18

DATA DATA-ORE; DATA = TODAY ( ) ; ORA = TIME ( ) ; DATANOF = DATA ; ORANOF = ORA ; ANNO = YEAR ( DATA ) ; TRIM = QTR ( DATA ) ; MESE = MONTH ( DATA ) ; GSET = WEEKDAY ( DATA ) ; GMESE = DAY ( DATA ) ; ORE = HOUR ( ORA ) ; MINUTI = MINUTE ( ORA ) ; FORMAT DATA DDMMYY8. ORA TIME 8. ; PROC PRINT NOOBS ; RUN ; DATA ORA DATANOF ORANOF ANNO TRIM MESE 24/02/87 18:00:00 9916 64800 1987 1 2 GSETT GMESE ORE MINUTI 3 24 18 0

MANIPOLAZIONE DI STRINGHE E CARATTERI Le stringhe sono un insieme di caratteri - lettere, cifre e/o caratteri speciali). Una stringa può essere espressa come: - variabile non numerica; - contenuto di una variabile non numerica; - risultato di un espressione non numerica. La manipolazione riguarda le attività di: ESTRAZIONE di sottoinsieme di caratteri contenuti in stringhe CONCATENAMENTO di stringhe SCANSIONE di stringhe per la ricerca di uno o più caratteri DETERMINAZIONE della lunghezza di stringhe DATA ABBONATI; INPUT NOME $ 1-5 COGNOME $ 6-11 CODICE $ 12-15 VIA $ 16-36 TELEFONO $ 37-46 CAP $ 47-51 ; CARDS; EMY BOLLA A37FVIA FILLUNGO 2, LUCCA22987-258355100 LELLARIPOLIB5F CORSO ROMA 8, FIENZE325562-05550100 ELIO LUPI AM3MVIA AURELIA 127, PISA67054-05056100 IVA MORI FFF P.ZA DANTE 66, MILANO2286-02 20100 LUIGICORTIZ4M VICOLO CORTO 44, PARMA LIA VERRIF LARGO AUGUSTO 2, ROMA5437615-06 ; RUN;

FUNZIONI INDEX E SUBSTR INDEX ( argomento1, argomento2 ) ; ricerca in argomento1 la stringa rappresentata da argomento2 la scansione di argomento1 avviene da sinistra a destra si esaurisce quando trova argomento2... A = 'VIA TURATI N.27 VIAREGGIO' ; RIS1 = INDEX (A, 'VIA' ) ; RIS2 = INDEX ( A, ' VIA'); RIS3 = INDEX ( A, 'via' ); PROC PRINT NOOBS ; RUN ; RIS1 RIS2 RIS3 1 17 0 La funzione INDEX dopo la ricerca assume un numero : - la posizione del primo carattere della stringa specificata in argomento2-0 se la ricerca in argomento2 non ha avuto esito

SUBSTR ( argomento, posizione [,n ] ) a partire da posizione estrae le prime n lettere di argomento... MACCHINA = 'SAAB9000I' ; MARCA = SUBSTR ( MACCHINA, 1, 4) ; MODELLO = SUBSTR ( MACCHINA, 5) ; PROC PRINT NOOBS ; VAR MARCA MODELLO ; RUN ; MARCA SAAB MODELLO 9000I Un altro modo di usare la funzione SUBSTRING è: SUBSTR ( argomento, posizione [,n ] ) = stringa Il valore di stringa è posta nella variabile specificata in argomento a partire da posizione e sostituisce il numero di caratteri specificato in n... MACCHINA = 'FIAT127' ; SUBSTR ( MACCHINA, 5,3) = 5 00 ; in questo caso la variabile MACCHINA verrà a essere la stringa FIAT500

DATA ABBONATI; INPUT NOME $ 1-5 COGNOME $ 6-11 CODICE $ 12-15 VIA $ 16-36 TELEFONO $ 37-46 CAP $ 47-51 ; POS = INDEX ( TELEFONO, '-' ) ; IF POS GT 0 THEN PREFISSO = SUBSTR (TELEFONO, POS+1) ; IF SUBSTR (PREFISSO,1,2) = '05' ; CAEDS ; EMY BOLLA A37FVIA FILLUNGO 2,LUCCA22987-0583 LELLARIPOLIB5F CORSO ROMA 8,FIRENZE325562-055 ELIO LUPI AM3MVIA AURELIA 127,PISA67054-050 ; RUN ; PROC PRINT; RUN ; C è da notare che se manca il valore n nella specifiche della funzione SUBSTR, la sottostringa coincide con il resto di argomento a partire dal carattere specificato in posizione.

FUNZIONE LENGTH LENGTH ( argomento ); fornisce la lunghezza dell'espressione specificata dall'argomento la scansione avviene da destra a sinistra si esaurisce quando trova uno spazio vuoto... VAR = 'ELEONORA ROSSI' ; N = LENGTH (VAR) ; PROC PRINT NOOBS ; VAR N ; N 8 Può essere utile quando la variabile da cui si dovranno estrarre caratteri è di lunghezza variabile

Per creare un archivio con tante osservazioni quante sono le potenzialità dei clienti e con le variabili: TELEFONO PREFISSO SESSO DATA OMAGGI ; SET ABBONATI ; /* estrazione del prefisso dal numero telefonico */ POS = INDEX ( TELEFONO, '-' ) ; IF POS GT 0 THEN PREFISSO = SUBSTR (TELEFONO, POS + 1 ) ; IF SUBSTR (PREFISSO, 1, 2 ) = '05' ; /* determinazione del sesso */ LENGTH SESSO $ 1 ; SESSO = SUBSTR ( CODICE, LENGTH (CODICE), 1 ) ; IF SESSO = 'F' ;...

OPERATORE DI CONCATENAZIONE e FUNZIONE TRIM argomento 1 argomento 2... A = 'CASA ' ; B = 'BLANCA' C = A B ; CASA BLANCA 10 posizioni per casa e 6 per blanca, quindi l operatore non elimina i blank TRIM ( argomento )... A = 'CASA ' ; B = 'BLANCA' C = TRIM (A) B ; CASABLANCA La funzione TRIM elimina i blank DATA OMAGGI ; SET ABBONATI ; /* estrazione del prefisso dal numero telefonico */ POS = INDEX ( TELEFONO, '-' ) ; IF POS GT 0 THEN PREFISSO = SUBSTR (TELEFONO, POS + 1 ) ; IF SUBSTR (PREFISSO, 1, 2 ) = '05' ; /* determinazione del sesso */ LENGTH SESSO $ 1 ; SESSO = SUBSTR ( CODICE, LENGTH (CODICE), 1 ) ; IF SESSO = 'F' ; /* crea la variabile SIGNORA */ SIGNORA = 'Sig.ra ' TRIM ( NOME ) ' ' COGNOME ;..

FUNZIONE SCAN SCAN ( argomento, n [, 'delimitatori' ]) estrae la n-esima parola contenuta in argomento (da sx a dx) oltre a blank i delimitatori riconosciuti dal sistema sono : < ( + & * ) ; -- / 0 %... VAR = 'NEL MEZZO DEL CAMMIN DI NOSTRA VITA ' ; SCAN1 = SCAN (VAR, 4) ; SCAN2 = SCAN (VAR, 2, ' / ' ) ;... SCAN1 = CAMMIN SCAN2 = DATA OMAGGI ; SET ABBONATI ; /* estrazione del prefisso dal numero telefonico */ POS = INDEX ( TELEFONO, '-' ) ; IF POS GT 0 THEN PREFISSO = SUBSTR (TELEFONO, POS + 1 ) ; IF SUBSTR (PREFISSO, 1, 2 ) = '05' ; /* determinazione del sesso */ LENGTH SESSO $ 1 ; SESSO = SUBSTR ( CODICE, LENGHT (CODICE), 1 ) ; IF SESSO = 'F' ; /* crea la variabile SIGNORA */ SIGNORA = 'Sig.ra ' TRIM ( NOME ) ' ' COGNOME ; /* crea le variabili RECAPITO e CITTA */ LENGTH RECAPITO CITTA $ 30 ; RECAPITO = SCAN (VIA, 1, ',' ) ; CITTA = CAP ' ' SCAN (VIA, 2, ',' ) ;

GESTIONE DEI VALORI MANCANTI VALORI MANCANTI DI SISTEMA (derivanti da operazioni non valide) VALORI MANCANTI DI UTENTE (assenza delle informazioni) rappresentazione dei valori mancanti TIPO DI INPUT PUNTO SPAZIO a colonne SI SI a lista SI NO a formati SI SI Per leggere una variabile non numerica avente per valore un punto si usa il formato $CHAR. DATA SIMBOLI ; INPUT SIMBOLO $CHAR1. NUMERO ; CARDS4;! 1, 15. 12 ; 12 ; ; ; ; RUN ; PROC PRINT DATA = SIMBOLI NOOBS; TITLE ' LETTURA DEI CARATTERI. ; E CARDS4' ; RUN ; LETTURA DEI CARATTERI. E ; ' SIMBOLO NUMERO! 1, 15. 12 ; 12 Da notare la dichiarazione CARDS4 in quanto i dati contengono il simbolo ; che non significa la chiusura dei dati: In questo caso la chiusura si fa con ;;;;

i valori mancanti si possono anche assegnare da programma DATA TRASFORM ; INPUT ID RISPOSTA ; IF RISPOSTA = 0 OR RISPOSTA = 9 THEN RISPOSTA =. ; CARDS ; 1 0 2 1 3 1 4 9 5 9 ; PROC FREQ ; TABLES RISPOSTA / MISSING ; RUN ; CUMULATIVE CUMULATIVE RISPOSTA FREQUENCY PERCENT FREQUENCY FREQUENCY -------------------------------------------------------------------------------------------------. 3 60.0 3 60.0 1 2 40.0 5 100.0 si possono avere fino a 27 classi differenziate di valori mancanti DATA TRASFORM1 ; SET TRASFORM ; MISSING A B ; IF RISPOSTA = 0 THEN RISPOSTA = 'A' ; IF RISPOSTA = 9 THEN RISPOSTA = 'B' ; PROC FREQ ; TABLES RISPOSTA / MISSING ; RUN ; CUMULATIVE CUMULATIVE RISPOSTA FREQUENCY PERCENT FREQUENCY FREQUENCY ------------------------------------------------------------------------------------------------- A 1 20.0 1 20.0 B 2 40.0 3 60.0 1 2 40.0 5 100.0

si può sapere se una variabile contiene un valore mancante in caso di variabile numerica il confronto va fatto con il punto in caso di variabile non numerica esistono diversi tipi di confronto DATA _NULL_ ; INPUT QUEST RISPO $ ; IF QUEST =. THEN IF RISPO = '' THEN IF RISPO =. THEN IF RISPO = ' ' THEN In una dichiarazione IF il confronto con valore mancante equivale a - confronto con il più piccolo valore numerico possibile; - confronto con una risposata contenente spazi e, quindi, la più piccola possibile in presenza di missing occorre far uso di funzioni e opzioni adatte, cioè che risolvono I problemi dei missing ignorandoli DATA FUNZIONI; INPUT NUMERO1 NUMERO2 NUMERO3; TOT1 = NUMERO1 + NUMERO2 + NUMERO3 ; TOT2 = SUM (NUMERO1, NUMERO2, NUMERO3) ; MEDIA1 = (NUMERO1 + NUMERO2 + NUMERO3) / 3 ; MEDIA2 = MEAN (NUMERO1, NUMERO2, NUMERO3) ; CARDS; 10 20 30 40. 60 PROC PRINT NOOBS; RUN ; NUMERO1 NUMERO2 NUMERO3 TOT1 TOT2 MEDIA1 MEDIA2 10 20 30 60 60 20 20 40. 60. 100. 50

LE VARIABILI AUTOMATICHE vengono assegnate al PVD direttamente dal sistema _N_ conta il numero di esecuzioni del passo di DATA _ERROR_ = 0 se non si rilevano errori nel ciclo di esecuzione del passo di DATA = 1 se viene rilevato almeno un errore nel ciclo di esecuzione del passo di DATA DATA LEGGI ; IF _N_ = 1 THEN SET MIEI.VALORI ; IF _N_ GT MAXREC THEN STOP ; SET DISCO ; IF _ERROR_ = 1 THEN STOP ;

l'esecuzione di RETURN: - interrompe il ciclo di esecuzione - riporta all'inizio del passo di DATA DICHIARAZIONE RETURN - pone a missing le variabili del PVD per cui non c'è una RETAIN - fa incrementare di un'unità la _N_ DATA POSITIVI ; INPUT NUMERO ; IF NUMERO LE 0 THEN RETURN ; CARDS; 10-1 20 PROC PRINT; RUN; in questo caso RETAIN non ha effetto perché l osservazione viene scritta prima di eseguire la dichiarazione di IF OBS NUMERO 1 10 2-1 3 20

se invece si aggiunge la dichiarazione di OUTPUT DATA POSITIVI ; INPUT NUMERO ; IF NUMERO LE 0 THEN RETURN ; ELSE OUTPUT; 10-1 20 PROC PRINT; RUN; OBS NUMERO 1 10 2 20

ETICHETTE E DICHIARAZIONE GO TO GO TO etichetta;... etichetta :... RETURN; Permette di saltare nel punto preciso del programma dove è presente l etichetta DATA POSITIVI NEGATIVI ; INPUT NUMERO ; IF NUMERO GT 0 THEN GO TO POSITIVI ; IF NUMERO LT 0 THEN GO TO NEGATIVI ; RETURN ; POSITIVI: OUTPUT POSITIVI ; RETURN ; NEGATIVI: OUTPUT NEGATIVI ; RETURN ; o, equivaletemene, si può esprimere in forma più compatta nel seguente modo DATA POSITIVI NEGATIVI ; INPUT NUMERO ; IF NUMERO = 0 THEN RETURN ; ELSE IF NUMERO GT 0 THEN OUTPUT POSITIVI ; IF NUMERO LT 0 THEN OUTPUT NEGATIVI ;

LA DICHIARAZIONE LINK LINK etichetta... etichetta ; Permette di saltare nel punto preciso del programma dove è presente l etichetta DATA CALCOLA ; DROP N ; INPUT N A B ; IF N = 2 THEN LINK CALC2 ; ELSE LINK CALC1; IF TOTALE GT 0 THEN OUTPUT ; RETURN ; CALC1 : TOTALE = A + B ; RETURN ; CALC2 : TOTALE = A - B ; RETURN ; CARDS; 1 2 3 2 4 3 3 4 5 PROC PRINT; RUN ; OBS A B TOTALE 1 2 3 5 2 4 3 1 3 4 5 9

LA DICHIARAZIONE DO DO indice = inizio [ TO fine [ BY incremento ] ] [, inizio [ TO fine [ BY incremento ] ]]...;... END ; Permette di l esecuzione di un gruppo di istruzioni che si trovano fra le dichiarazioni DO ed END Gli incrementi possono esprimersi in diversi modi DO I = 1 TO 10 ; DO I = 1 TO 10 BY 1 ; DO I = 10 TO 1 BY -2 ; DO I = 0 TO 1 BY.3 ; DO DATA = '01JAN94'D TO '31DEC94'D BY 30 ; N = 3 DO INDICE = N TO 2 BY 1 ; (non viene mai eseguito) DO INDICE = 100 ; (viene eseguito una sola volta) DO INDICE = 1, 5, 10, 50, 100 ; (non viene mai eseguito) DO GIORNO = 'DOMENICA', 'LUNEDI' ; (viene eseguito 2 volte) DO I = 1 TO 10 BY 1, 10 TO 1 BY -1 ; (viene eseguito 20 volte)

DO WILE ( espressione ) ;... END ; Esce dal ciclo quando espressione non è più verificata DO UNTIL ( espressione ) ;... END ; Esce dal ciclo quando espressione è verificata DATA RENDITA ; CAPITALE = 200 ; ANNO = 1985 ; DO WHILE ( CAPITALE LE 500 ) ; /* DO UNTIL ( CAPITALE GT 500 ) ; */ CAPITALE = CAPITALE + CAPITALE *0.1 ; ANNO = ANNO + 1 ; END ; PROC PRINT NOOBS ; RUN ; DATA RENDITA ; CAPITALE = 200 ; DO ANNO = 1985 TO 1999 WHILE ( CAPITALE LE 500 ) ; CAPITALE = CAPITALE + CAPITALE *0.1 ; END ; PROC PRINT NOOBS ; RUN ; I cicli si concludono quando il montante supera 50 milioni CAPITALE ANNO 51874849 1995

LA DICHIARAZIONE ARRAY ARRAY < nome array > { n } [ $ ] [ lunghezza ] elementi ; n = numero elementi dell'array (la parentesi graffa fa parte della sintassi) se nella specifica n si pone * il sistema calcolerà il numero degli elementi $ = array non numerico lunghezza = lunghezza degli elementi non definiti prima elementi = variabili che compongono l'array Permette la gestione di aree di memoria omogenee senza lasciare traccia nel PVD trattandosi di una sovrastruttura logica che permette di riferire una singola variabile a un elemento dell array esempi lettura di 10 variabili numeriche assegnate all array RISPOSTA ARRAY RISPOSTA { 10 } R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 ; ARRAY RISPOSTA { 10 } R1-R10 ; ARRAY RISPOSTA { * } R10-R1 ; lettura di 10 variabili stringa assegnate all array LETTERE ARRAY LETTERE { 5 } $ A B C D E ; lettura delle variabili stringa che si trovano fra le variabili NOME e SESSO ARRAY CAR { * } NOME--SESSO ;

organizzazione di variabili in array DATA RISPOSTA; SET RISPOSTE ; INPUT R1-R10 ; IF R1 = 9 THEN R1 =. ; IF R2 = 9 THEN R2 =. ; IF R3 = 9 THEN R3 =. ; IF R4 = 9 THEN R4 =. ; IF R5 = 9 THEN R5 =. ; IF R6 = 9 THEN R6 =. ; IF R7 = 9 THEN R7 =. ; IF R8 = 9 THEN R8 =. ; IF R9 = 9 THEN R9 =. ; IF R10 = 9 THEN R10 =. ; RUN; equivale a DATA RISPOSTA1; DROP I ; SET RISPOSTE ; ARRAY RISPOSTA { 10 } R1-R10 ; INPUT R1-R10 ; DO I = 1 TO 10 ; IF RISPOSTA ( I ) = 9 THEN RISPOSTA ( I ) =. ; END ; RUN; ovvero DATA RISPOSTA2; DROP I ; SET RISPOSTE ; ARRAY RISPOSTA { * } R1-R10 ; INPUT R1-R10 ; DO I = 1 TO DIM (RISPOSTA) ; IF RISPOSTA ( I ) = 9 THEN RISPOSTA ( I ) =. ; END ; RUN; in questo caso RISPOSTA { 1 } corrisponde a R1 RISPOSTA { 2 } corrisponde a R2 RISPOSTA { 10 } corrisponde a R10

Mentre in questo caso DATA RISPOSTA3; DROP I ; SET RISPOSTE ; ARRAY RISPOSTA { 10 } R10 R1 R2-R9 ; INPUT R1-R10 ; DO I = 1 TO 10 ; IF RISPOSTA ( I ) = 9 THEN RISPOSTA ( I ) =. ; END ; RISPOSTA { 1 } corrisponde a R10 RISPOSTA { 2 } corrisponde a R1 RISPOSTA { 3 } corrisponde a R2 RISPOSTA { 4 } corrisponde a R3

definizione di nuove variabili con array DATA PERCENTO ; DROP I MESE1-MESE12 TOTALE ; INPUT ANNO MESE1-MESE12 ; TOTALE = SUM ( OF MESE1-MESE12 ) ; ARRAY LAVORI { 12 } MESE1-MESE12 ; ARRAY PERCENT { 12 } PC1-PC12 ; DO I = 1 TO 12 PERCENT ( I ) = ( LAVORI ( I ) / TOTALE ) * 100 ; END ; CARDS ; 1990 1500 1400 1600 1800 2200 2500 1200 600 1800 2500 2800 3200 1991 1800 1700 1900 2000 3000 3300 1400 750 2000 2800 3200 4000 RUN ; PROC PRINT NOOBS ; FORMAT PC1-PC12 4.1; RUN ; ANNO PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8 PC9 PC10 PC11 PC12 1990 6.5 6.1 6.9 7.8 9.5 10.8 5.2 2.6 7.8 10.8 12.1 13.9 1991 6.5 6.1 6.8 7.2 10.8 11.8 5.0 2.7 7.2 10.1 11.5 14.4

CONVERSIONE DA NON NUMERICO A NUMERICO IMPLICITA il sistema converte automaticamente se la variabile non numerica viene: - assegnata a una variabile numerica - utilizzata in operazioni aritmetiche - confrontata con operatori logici a una variabile numerica - usata in una funzione che prevede argomenti numerici DATA CONVERTI; VARC = '100' ; VARCERR = 'MAMMA' ; VARN = VARCERR + 100 ; /* VARN = 200 */ VARN = VARC + 100 ; /* VBRN =. */ IF ( VARC = 100 ) THEN VARN + 1 ; /* VARN = 201 */ VARN = VARC ; /* VARN = 100 */ TOTALE = SUM (VARN + VARC) ; /* TOTALE = 200 */ RUN; Le conversioni vengono segnalate sulla finestra SASLOG. Se non produce un risultato significativo, oltre al messaggio di errore in SASLOG, la variabile assume valore mancante e la variabile automatica _ERROR_ assume valore 1. ESPLICITA INPUT ( argomento, formato. ) ; DATA NASCITE ; INPUT NOME $10. NASCITA $ 8. ; CARDS ; FRANCESCO 22/11/82 MONICA 16/11/78 ; DATA ETA ; SET NASCITE ; ANNI = 2004 - YEAR ( INPUT ( NASCITA, DDMMYY8.)) ; RUN ;

CONVERSIONE DA NUMERICO A NON NUMERICO IMPLICITA il sistema converte automaticamente se la variabile numerica viene: - assegnata a una variabile non numerica con il formato BESTc. Dive c è la lunghezza della variabile non numerica DATA BESTX ; A = 'AF'; /*variabile non numerica lunga 2 B = 'SAS' ; /*variabile non numerica lunga 3 C = 'GRAPH' ; /*variabile non numerica lunga 5 N = 1267 ; /*variabile numerica lunga 8 A = N ; /* A e' convertito in BEST2 ma non riesce a visualizzarlo in 2 posizioni B = N ; /* B e' convertito in BEST3 cioe' le 3 posizioni richieste da N */ C = N ; / * 1267 e' convertito in BEST5 */ - usata in una funzione che prevede argomenti non numerici DATA SORPRESA ; CAP = 00100 ; CITTA = 'ROMA' ; MARCA = 'SAAB' ; MODELLO = 90000 ; VAR1 = CAP CITTA ; VAR2 = MARCA MODELLO ; PROC PRINT NOOBS ; RUN ; CAP CITTA MARCA MODELLO VAR1 VAR2 00100 ROMA SAAB 90000 00100ROMA SAAB 90000 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 0 0 1 0 0 R O M A S A A B 9 0 0 0 0

ESPLICITA PUT ( argomento, formato ) argomento = può essere una variabile, costante o espressione non numerica formato = deve essere coerente con l argomento lunghezza = lunghezza degli elementi non definiti prima Il risultato è sempre una stringa: - con argomento numerico risultato = stringa allineata a destra - con argomento non numerico risultato = numero allineato a sinistra DATA SORPRESA1; CAP = 00100 ; CITTA = 'ROMA' ; MARCA = 'SAAB' ; MODELLO = '90000' ; VAR1 = PUT ( CAP, 5. ) CITTA ; VAR2 = MARCA PUT ( MODELLO, 5. ) ; PROC PRINT NOOBS ; RUN ; CAP CITTA MARCA MODELLO VAR1 VAR2 00100 ROMA SAAB 90000 00100ROMA SAAB90000 1 2 3 4 5 6 7 8 9 0 0 1 0 0 R O M A S A A B 9 0 0 0 0

LEFT ( argomento ) sposta i blank dalla sinistra alla destra di argomento DATA SORPRESA 2; CAP = 00100 ; CITTA = 'ROMA' ; MARCA = 'SAAB' MODELLO = '90000' ; VAR1 = CAP CITTA ; VAR2 = MARCA LEFT ( MODELLO ) ; PROC PRINT NOOBS ; RUN ; CAP CITTA MARCA MODELLO VAR1 VAR2 00100 ROMA SAAB 90000 00100ROMA SAAB90000