Wprowadzenie do Systemu SAS i programowania w SAS 4GL



Podobne dokumenty
Wprowadzenie do programowania w SAS-ie oraz estymacji rozkładów

SAS Podstawowe informacje przed ćwiczeniem 1

SAS Podstawowe informacje przed ćwiczeniem 2

ZESTAW 1 SAS 4GL. Język stworzony na potrzeby przetwarzania dużych zbiorów danych. Składają się nań:

SAS. Wprowadzenie do Systemu I Języka 4GL. Seweryn Kowalski /9/2006 1

SAS 4GL Podsumowanie.

Tytuł: PRZETWARZANIE DANYCH W SAS Autor: Wioletta Grzenda, Aneta Ptak-Chmielewska, Karol Przanowski, Urszula Zwierz. Wstęp

PAKIETY STATYSTYCZNE

SAS Macro Language w pigułce

PAKIETY STATYSTYCZNE

Wprowadzenie do SAS. Jak zacząć? Enhanced Editor (1) Uruchamianie programu. Ćwiczenie 3. Definiowanie bibliotek

Wprowadzenie do SAS 4GL Zapoznanie ze środowiskiem SAS University Edition oraz SAS Studio. Podstawowe pojęcia środowiska SAS.

Przetwarzanie danych. Biblioteka. Presentation title. Biblioteka:

1 Obliczenia na danych

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

SQL 4 Structured Query Lenguage

SAS 4GL ODS, przykładowe procedury.

Wykład. Wprowadzenie do systemu SAS (import i transformacje danych)

15. Funkcje i procedury składowane PL/SQL

Informatyka w selekcji - Wykªad 4

PAKIETY STATYSTYCZNE

Zasady programowania Dokumentacja

Bloki anonimowe w PL/SQL

SAS Access to Hadoop, SAS Data Loader for Hadoop Integracja środowisk SAS i Hadoop. Piotr Borowik

ANALIZA DANYCH W STATA 8.0 CZĘŚĆ II

Stosowanie indeksów ma swoje korzyści, ale bywa również kosztowne.

COMARCH IT AKADEMIA. Programista VBA w Microsoft Excel (microbootcamp)

Podstawy i języki programowania

PAKIETY STATYSTYCZNE 5. SAS wprowadzenie - środowisko Windows

Przypisywanie bibliotek w architekturze SAS

Wprowadzenie do SAS. Wprowadzenie. Historia SAS. Struktura SAS 8. Interfejs: SAS Explorer. Interfejs. Część I: Łagodny wstęp do SAS Rafał Latkowski

Laboratorium 10 Temat: Zaawansowane jednostki testowe. Operacje na plikach. Funkcje.

Co to jest Baza Danych

Część 1: OLAP. Raport z zajęć laboratoryjnych w ramach przedmiotu Hurtownie i eksploracja danych

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Przykład rozwiązywania problemu w programie DSS1OPT

Relacyjne bazy danych. Podstawy SQL

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Podstawy programowania skrót z wykładów:

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Komputerowe wspomaganie eksperymentu 5

PRZYRZĄDY WIRTUALNE. Część 6 Macierze, klastry, wzory. Prof. Krzysztof Jemielniak

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Database Connectivity

Programowanie w języku Python. Grażyna Koba

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Pobieranie argumentów wiersza polecenia

Biuletyn techniczny. Funkcje dodatkowe dla Clarion Report Writer CDN OPT!MA Copyright 2006 COMARCH S.A.

Programowanie w SQL. definicja bloku instrukcji BEGIN...END, warunkowe wykonanie instrukcji IF...ELSE, wyrażenie CASE,

Składowane procedury i funkcje

Język programowania PASCAL

Zadanie 1. Plik Nowy Kod. lub naciskając ikonę Nowy kod (jak na rysunku) Tworzymy bibliotekę o nazwie lab wpisując instrukcję

"Szara codzienność" analityka czyli jak ułatwić sobie pracę: Usecase

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

Analiza leksykalna 1. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

BIOMETRIA 3. Wprowadzenie do pakietu SAS

Narzędzia informatyczne w językoznawstwie

Języki skryptowe w programie Plans

Visual C# dla zupełnie początkujących / Tony Gaddis. Wydanie IV. Gliwice, copyright Spis treści. Wstęp 11. Uwaga, czytelnicy 19

Oracle11g: Wprowadzenie do SQL

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

System operacyjny Linux

Imię i Nazwisko Data Ocena. Laboratorium 7

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Język PL/SQL. Rozdział 2. Kursory

Zadanie analizy leksykalnej

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

PODSTAWY BAZ DANYCH 13. PL/SQL

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Analiza leksykalna 1. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki

Programowanie strukturalne

Importowanie danych z Excela

ZAJĘCIA 2. Przed rozpoczęciem zajęć należy wykonać instrukcje z poprzednich laboratoriów bądź z pliku zaj2_prep.sas. FILTROWANIE WIERSZY

PL/SQL. Zaawansowane tematy PL/SQL

Oracle PL/SQL. Paweł Rajba.

Smarty PHP. Leksykon kieszonkowy

ANALIZA DANYCH W STATA 8.0

Python. Wprowadzenie. Jolanta Bachan

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Kurs języka Python. Wykład 11. Marcin Młotkowski. 4 stycznia Kontrola poprawności podczas biegu programu. 2 Testowanie oprogramowania

Zaawansowany kurs języka Python

PAKIETY STATYSTYCZNE

Relacyjne bazy danych. Podstawy SQL

Kursor jawny. Rozdział 10a Kursory. Deklarowanie kursora (1) Deklarowanie kursora (2)

Microsoft SQL Server Podstawy T-SQL

Gramatyki atrybutywne

Program szkolenia VBA (VISUAL BASIC FOR APPLICATIONS) W EXCELU PRZEKROJOWY.

Wykład II - Dane w Systemie SAS

Administracja i programowanie pod Microsoft SQL Server 2000

Program szkolenia VBA (VISUAL BASIC FOR APPLICATIONS) W EXCELU PODSTAWOWY.

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python.

GRAFICZNA ANALIZA PROGRAMÓW SAS GRAPHICAL ANALYSIS OF SAS PROGRAMS. 1. Wstęp. STUDIA INFORMATICA 2010 Volume 31 Number 3 (91)

Obowiązuje od wersji

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja cz. 1

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Transkrypt:

Wprowadzenie do Systemu SAS i programowania w SAS 4GL Henryk Maciejewski hmac@pwr.wroc.pl 1 Plan System SAS - wprowadzenie SAS: moduły i aplikacje Środowisko SAS Organizacja danych w środowisku SAS Programowanie w SAS 4GL język do przetwarzania danych 2

System SAS - wprowadzenie Historycznie SAS = Statistical Analysis System Obecnie, (a) system do budowania rozwiązań DSS (moduły do pobierania danych, analiz, raportowania), (b) specjalizowane rozwiązania DSS Moduły np. Base SAS core (język, procedury) STAT procedury analizy statystycznej ACCESS pobieranie danych ze źródeł zewn. GRAPH AF, webaf budowa aplikacji EIS... OR, QC, ETS,... Procedury: operations research, quality control, time series forecasting, itd. Enterprise Miner Data Warehouse Administrator 3 System SAS - wprowadzenie Rozwiązania biznesowe dla wspomagania decyzji (decision support) w środowiskach z duŝymi zasobami danych np. Data warehousing Data mining IT resources management Human resources management Financial management Web portal usage analysis Data analysis in pharmaceutical industry CRM, SRM (=Supplier RM), etc. 4

Środowisko programowania MVA (MultiVendor Architecture): programy przenośne: VMS, CMS, OS/390, Unix, Windows, OS/2 Organizacja danych w środowisku SAS Pliki SAS (SAS files) Np., SAS data sets, views, MDDBs Umieszczane w bibliotekach SAS (SAS libraries) referencja (LIBREF) do folderu, kartoteki itp. systemu operacyjnego np. LIBNAME fhh c:\data\fhh ; 5 Środowisko programowania - biblioteki Biblioteki tworzone automatycznie SASHELP SASUSER WORK -- SAS system files -- user profile files -- biblioteka tymczasowa kasowana po zamknięciu systemu SAS, pozostałe są permanentne Nazwy plików SAS kwalifikowane: libraryname.filename, np. fhh.abc abc -- plik w bibliotece fhh -- plik w bibliotece WORK 6

Środowisko programowania zbiory danych Zbiory danych SAS - typy: DATA tablica fizycznie przechowująca dane VIEW nie zawiera fizycznie danych, a jedynie kod ( query ) realizujący dostęp do danych. VIEW widziane jest przez identycznie jak DATA set (na ogół) Konwencja nazw Wiersze to obserwacje Kolumny to zmienne (variables) Zbiory danych (data set) składają się z: deskryptora - atrybuty zbioru i zmiennych danych 7 Środowisko programowania zbiory danych Wyświetlamy deskryptor DATA set: PROC CONTENTS DATA=fhh.abc; RUN; -----Alphabetic List of Variables and Attributes----- # Variable Type Len Pos Format Informat Label ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒ 1 sex Char 2 16 $3. $3. sex 4 teach_duration Num 8 8 11. 11. teach_duration 2 teacher_code Num 8 0 11. 11. teacher_code 3 titel_code Char 12 18 $12. $12. titel_code Typy zmiennych w SAS character numeric Atrybuty zmiennych Length - długości zmiennych: numeric: 3-8, character 1-32767 (MS Windows) Format - jak drukować wartość zmiennej Informat - jak konwertować input string do wartości zmiennej Label - opis zmiennej 8

Środowisko programowania zbiory danych Drukuj wartości zapisane w DATA set: PROC PRINT DATA=fhh.abc; RUN; Obs sex teacher_code titel_code teach_duration 1 M 1 006 1 2 M 2 502 1 3 M 3. 4 M 4 1 5 M 5 022 1 6 M 6 006 1 7 W 7 1 8 M 8 006 1 Missing value Wskazuje Ŝe w danej obserwacji nie ma wartości zmiennej missing numeric values reprezentowane przez. (kropka) missing character values reprezentowane przez puste miejsce 9 Plan System SAS - wprowadzenie SAS: moduły i aplikacje Środowisko SAS Organizacja danych w środowisku SAS Programowanie w SAS 4GL język do przetwarzania danych 10

Programowanie w SAS SAS 4GL język umoŝliwiający realizację: Dostępu do danych ( retrieval from external sources ) Przetwarzanie danych ( cleaning, transforming, combining ) Analizę danych Raportowanie Inne języki programowania w środowisku SAS SCL (object oriented SAS Component Lang.) SAS macro language 11 Przykład pierwszy program data abc; teachers=283; students=853; all=teachers+students; s_per_t=students/teachers; DATA STEP Utwórz data set abc Utwórz zmienne w abc Wykonaj data step proc print data=abc; PROC STEP Drukuj data set abc Data Set WORK.ABC Obs teachers students all s_per_t 1 283 853 1136 3.01413 12

Przetwarzanie w SAS SAS Data Set Raport Raw data file DBMS tables (e.g.,.mdb)... DATA Step PROC Step... DATA Step... External file SAS Data Set Remote access (ftp, TCP/IP socket, etc.) Program w SAS SAS Log 13 DATA Step, PROC Step DATA Step Wczytuje dane wejściowe Np. data sets, Pliki, itd. Przetwarza (modyfikuje) dane Produkuje dane wyjściowe Np. data sets, Pliki Raporty PROC Step Analiza danych w data setach, Tworzenie raportów (tekstowe, graficzne) 14

Algorytm DATA Step data students; input name $ sex $ note1 note2; avg=mean(note1,note2); datalines; Anna F 4 5 Ian M 3. Eva F 1 4 ; Obs name sex note1 note2 avg 1 Anna F 4 5 4.5 2 Ian M 3. 3.0 3 Eva F 2 1 1.5 15 Algorytm DATA Step - podumowanie Główna pętla DATA step: data step czyta jedną obserwację, Dane umieszczane w PDV = Program Data Vector; PDV inicjownany wartościami missing na początku kaŝdej iteracji Wykonywanie poleceń (statements) zapisanych w DATA step na danej obserwacji, Zapis obserwacji do wynikowego data set (implicit OUTPUT) UWAGA: Implicit OUTPUT nie działa jeśli jawnie uŝyjemy polecenia OUTPUT w DATA step Informacja wejściowa dla DATA step-u: SET statement pobieraj dane z data set-u INPUT statement pobieraj po linii danych z pliku zewn. (podanego w poleceniu INFILE) 16

Programowanie w data step Idiomy programisty Wybór obserwacji z data set Wybór zmiennych Tworzenie nowych / modyfikacja zmiennych OUTPUT statement tworzenie wielu zbiorów Łączenie data set-ów ( stacking, merging ) BY-group processing Czytanie/pisanie plików zewnętrznych 17 Wybór obserwacji data male; if sex= F then delete; Wyślij na wyjście wybrane obserwacje UŜywając subsetting IF: usuń obserwacje jest wyraŝenie if jest prawdą; data male; if sex= M ; lub: data male; where sex= M ; przetwarzaj dalej obserwację jeśli warunek jest prawdą; UŜywając WHERE (statement lub data set option) WHERE statement data male; set students (where=(sex= M )); WHERE data set option 18

Wybór obserwacji data male; if sex= F then delete; data male; if sex= M ; lub: data male; where sex= M ; Obs name sex note1 note2 avg 1 Anna F 4 5 4.5 2 Ian M 3. 3.0 3 Eva F 2 1 1.5 Obs name sex note1 note2 avg 1 Ian M 3. 3 data male; set students (where=(sex= M )); 19 Wybór zmiennych data avg_only; drop sex note1 note2; Wyślij na wy tylko wybrane zmienne UŜywając DROP, KEEP statements DROP statement data avg_only; keep name avg; lub: data avg_only; set students (drop= sex note1 note2); KEEP statement UŜywając DROP, KEEP data set options DROP data set option data avg_only; set students (keep= name avg); KEEP data set option 20

Wybór zmiennych data avg_only; drop sex note1 note2; data avg_only; keep name avg; lub: data avg_only; set students (drop= sex note1 note2); Obs name sex note1 note2 avg 1 Anna F 4 5 4.5 2 Ian M 3. 3.0 3 Eva F 2 1 1.5 Obs name avg 1 Anna 4.5 2 Ian 3.0 3 Eva 1.5 data avg_only; set students (keep= name avg); 21 Tworzenie nowych zmiennych data pass (drop= sex note1 note2 avg); if avg < 2 then result='passed'; else result='failed'; Obs name sex note1 note2 avg 1 Anna F 4 5 4.5 2 Ian M 3. 3.0 3 Eva F 2 1 1.5 Obs name result 1 Anna failed 2 Ian failed 3 Eva passed 22

Tworzenie nowych zmiennych Uwaga nie rób tak: data pass; set students (drop= sex note1 note2 avg); if avg < 2 then result='passed'; else result='failed'; UWAGA: w tym przykładzie sex, note1,2 i avg nie są wczytywane ze zbioru we, stąd wartość avg jest niezainicjowana (czyli missing) Obs name sex note1 note2 avg 1 Anna F 4 5 4.5 2 Ian M 3. 3.0 3 Eva F 2 1 1.5 Obs name avg result 1 Anna. passed 2 Ian. passed 3 Eva. passed 23 OUTPUT Statement data males females; if sex='f' then output females; if sex='m' then output males; drop sex; Zapisuje bieŝącą obserwację do wyjściowego data set UŜyteczna przy tworzeniu kilku zbiorów z jednego data set-u UWAGA: jeśli OUTPUT jest jawnie uŝyty w DATA step, implicit OUTPUT nie działa (p. algorytm DATA step) Obs name sex note1 note2 avg 1 Anna F 4 5 4.5 2 Ian M 3. 3.0 3 Eva F 2 1 1.5 females males 1 Anna 1 Ian 2 Eva 24

OUTPUT Generacja danych data generator; do x=1 to 100; y=rannor(-1); output; end; UWAGA: nie ma instrukcji specyfikującej dane wejściowe (np. SET albo INPUT), więc będzie wykonana tylko jedna iteracja głównej pętli DATA steo-u (DATA step main loop) Wynik: 100 wartości losowych z rozkładu N(0,1) Obs x y 1 1 0.52813 2 2 0.51177...... 99 99-0.23971 100 100 0.92665 25 Łączenie data set-ów (instrukcja SET) data all; set males females; data all2; set males(in=m) females(in=f); if m then sex= M ; if f then sex= F ; Łącznie data set-ów (stacking): przetwarzaj obserwacje z pierwszego data set, potem drugiego itd.. Z którego zbioru we pochodzi dana obserwacja? zrób tak: males(in=m) tworzy automatic variable m (m=1 dla obserwacji ze zbioru males; m=0 poza tym) UWAGA: zmienne automatyczne (tu: m i f) nie są zapisywane do wyjściowego zbioru danych Obs name note1 note2 avg sex 1 Ian 3. 3.0 M 2 Anna 4 5 4.5 F 3 Eva 2 1 1.5 F 26

Łączenie data set-ów (MERGE) data lib; input name $ @8 date yymmdd10. title $20. ; datalines; Anna 2000/12/14 Hamlet Anna 2000/12/14 SAS Programming Witek 2001/07/12 XML ; proc sort data=students out=students_sort; by name; data st_books; merge students_sort lib; by name; keep name sex title; Operacja match-merging data set-ów: Data set STUDENTS: Obs name sex note1 note2 avg 1 Anna F 4 5 4.5 2 Ian M 3. 3.0 3 Eva F 2 1 1.5 Data set LIB: Obs name date title 1 Anna 2000-12-14 Hamlet 2 Anna 2000-12-14 SAS Programming 3 Witek 2001-07-12 XML Wynikowy data set: Obs name sex title 1 Anna F Hamlet 2 Anna F SAS Programming 3 Eva F 4 Ian M 5 Witek XML 27 BY-group Processing w DATA Step data best_note worst_note; set exam; by st_code; if first.st_code then output best_note; if last.st_code then output worst_note; keep st_code sem note; BY-group jest podzbiorem obserwacji z ustaloną wartością zmiennej podanej w poleceniu BY (zbioór musi być posortowany po tej zmiennej) UŜycie polecenia BY w DATA step tworzy zmienne automatyczne, np. FIRST.st_code LAST.st_code ustawione przez DATA step na 1 tylko dla pierwszej (ostatniej) obserwacji w grupie BY-group Data set EXAM: st_code sem note 1 WS96/97 1 1 WS96/97 4 1 WS95/96 6 2 WS99/00 1 2 WS00/01 3 3 WS99/00 1 3 WS99/00 1... BY-group BY-group 28

Zmienne automatyczne Np. kontrola błędów na wejściu: data results err_log; infile C:\temp\results.txt ; input name $ jump date yymmdd8.; if _error_ then output err_log; else output results; Tworzone przez DATA step; nie są częścią Program Data Vector; nie są zapisywane do wyjściowych data setów, np.: _N_ - numer iteracji DATA step-u _ERROR_ - ustawiany na 1 jeśli wystąpił błąd w przetwarzaniu dancych (input data error, math error, itd. ) FIRST.by_variable LAST. by_variable zobacz BY-group processing 29 Czytanie plików zewnętrznych data results err_log; infile C:\temp\results.txt ; input name $ 1-10 jump @24 date yymmdd8.; if _error_ then output err_log; else output results; Polecenie INFILE podaj plik, z którego będą czytane dane (podajemy w postaci fizycznej ścieŝki lub FILEREF utworzony przez polecenie FILENAME, np. FILENAME fileref path ; Polecenie INPUT Czyta (co najmniej jedną) linię z pliku Konwertuj linię do wartości zmiennych wg: Specyfikacji zmiennych, np. name $ - character variable jump, date numeric variables Specyfikacji kolumn, np. name $ 1-10 zakres kolumny Informat-ów, np. date yymmdd. informat dla zmiennej date 30

Czytanie plików zewnętrznych data xy; input x y; datalines; 1 2 3 4 5 6 7 8 ; data xy_ok; input x y @@; datalines; 1 2 3 4 5 6 7 8 ; Obs x y 1 1 2 2 4 5 Obs x y 1 1 2 2 3 4 3 5 6 4 7 8 Modyfikujemy zachowanie INPUT: INPUT var1 var2 var3 @@; Ten INPUT nie zaczyna czytać nowej linii dopóki ma dane w buforze wejściowym, które moŝe konwertować na zmienne UWAGA: polecenie INFILE moŝe mieć opcje: INFILE spec_pliku <opcje>; np. DML=, ; separator tokenów w linii FIRSTOBS=3; zacznij czytać plik od 3 l. i wiele innych... 31 Zapis do plików zewnętrznych data _null_; *no data set; set fhh.exam; file 'c:\temp\exam.txt'; put student_code 1-4 ', ' sem @24 note 3.1 ; Polecenie FILE podaj plik do którego będzie zapis danych Polecenie PUT zapisz jedną linię do pliku wyjściowego, uŝywając atrybutów FORMAT przypisanych zmiennym lub podanych w poleceniu PUT data _null_ - data step nie będzie tworzył wyjściowego data set-u 32

Jawne konwersja funkcje PUT i INPUT data a; t=1234.56; n=put(t,8.1); n2=put(t, comma8.1); t2=input(n2,comma8.2); Zmienna_znakowa = PUT(zmienna, format); Zmienna numeryczna lub znakowa = INPUT(zmienna, informat); proc print; Obs t n n2 t2 1 1234.56 1234.6 1,234.6 1234.6 33 Instrukcja RETAIN data wzrosty_miesieczne; set gielda; *data kurs mies; BY mies; RETAIN pocz; IF FIRST.mies then pocz=kurs; IF LAST.mies then DO; Wzrost=kurs-pocz; Output; end; Składnia polecenia RETAIN: RETAIN var initial_val; Zmienna var nie będzie inicjowana na missing na początku kolejnych iteracji DATA step (wartość będzie zachowana z poprzedniej iteracji) RównieŜ: var+expression; Co jest równowaŝne: RETAIN var 0; var=sum(var,expression); 34

Perspektywy (VIEW) data pracv bledy(keep=id)/view=pracv; INFILE pracownicy.txt missover; INPUT nr data yymmdd8. nazwisko $ kwota; IF kwota=. then OUTPUT bledy; ELSE OUTPUT stview; VIEW utworzone za pomocą DATA stepu Nie zawiera danych a jedynie kod pozwalajścy na uzyskanie danych Jest zbiorem tylko do odczytu UWAGA!!! Zbiór bledy nie zostanie utworzony zaraz po wykonaniu programu, ale dopiero po pierwszym odwołaniu do perspektywy pracv, np. przez: proc print data=pracv; 35 Tablice (polecenie ARRAY) data a; INPUT skok1 skok2 skok3; ARRAY s(3) skok1 skok2 skok3; DO i=1 TO 6; IF s(i)=0 then s(i)=.; END; Tablica jest referencją do istniejących zmiennych, zgrupowanych pod wspólną nazwą Polecenie ARRAY nie tworzy nowych zmiennych) lub: ARRAY x(*) _NUMERIC_: Ale uwaga ten wariant tworzy zmienne tymczasowe: Wszystkie zmienne numeryczne w data stepie ARRAY y(100) _TEMPORARY_ (100*.); Zmienne te nie są zapisywane do zbioru wyjściowego Są automatycznie RETAINED 36

Język makr makrozmienne %LET swieta= 24dec2002'd; %LET zbior=klasa; TITLE Raport dla zbioru &zbior ; Ile_dni = &swieta today(); put Do Swiat zostało ile_dni dni; Makrozmienne: - przechowują jedynie teksty; - wartości makrozmiennych są ustalane przed kompilacją programu; - wartości są rozwijane w, nie są w - %LET w open source (poza definicją makroprogramu) tworzy globalną makrozmienną 37 Język makr makroprogramy %macro import(rawfile, ds); data &ds; infile &rawfile; input t @; %do i=1 %to &N; input v&i %eval(&kol+&i) @; %end; %mend import; W makroprogramach moŝemy uŝywać wyraŝeń i funkcji wykonywanych przez makroprocesor, np. - %if %then %else ; - %do %to %end; - %eval() - %sysevalf() %let rf= t.txt'; %import(&rf,t); 38

Interfejs makr i DATA step ZauwaŜ, Ŝe w poniŝszym (błędnym) kodzie makrozmienna foot nie chce zaleŝeć od wartości zmiennej w DATA stepie... data a;... if full then do; %let foot= pełne ; end; else do; %let foot= puste ; end; Wartości makrozmiennych są ustawiane przed kompilacją programu stąd kod obok jest błędny... proc print; footnote &foot ; /*zawsze będzie napis puste!!!*/ Wydrukuj ostatnio utworzony data set... 39 Interfejs makr i DATA step Teraz kod jest poprawny data a;... if full then do; call symput( foot, pełne ); end; else do; call symput( foot, puste ); end; proc print; footnote &foot ; /* napis zaleŝy od full */ SYMPUT / SYMGET interfejs pomiędzy językiem makr a DATA stepem SYMPUT ustawia wartość makrozmiennej w czasie wykonywania DATA stepu SYMGET pobiera wartość makrozmiennej, ustawionej przez SYMPUT CALL SYMPUT( total, total); CALL SYMPUT( POS left(_n_), pos); pos=symget( POS left(_n_)); 40

Interfejs makr i DATA step data _null_; if 0 then set history nobs=count; call symput('num', left(put(count,8.))); stop; data _null_; put "Ilosc obserwacji w zbiorze history = &num"; Przykład podaj ile jest obserwacji w data set Opcja nobs polecenia set ustawia w zmiennej count ilość obserwacji w zbiorze. Robi to w czasie kompilacji data stepu. Polecenie STOP w celu uniknięcia zapętlenia (jest polecenie SET, a nigdy nie będzie spełniony warunek końca danych) 41