DO, DON T og DORF. SAS -programmering



Similar documents
* --- Alle labels kan nu bestemmes i PROC PRINT ;

Join af tabeller med SAS skal det være hurtigt?

Opdatering af metadata via SAS -programmer

SPDE. Lagring af større datamængder. make connections share ideas be inspired. Henrik Dorf Chefkonsulent SAS Institute A/S

Questionnaire #1: The Patient (Spørgeskema, må gerne besvares på dansk)

Management. Support HR

Student evaluation form

VHDL programmering H2

SAS og Excel. Kender du fem forskellige måder at overføre data mellem SAS og Excel? Gert Nissen, seniorkonsulent

Oracle Application Express

COACH BOT Modular e-course with virtual coach tool support

Research on the Danish heroin assisted treatment programme

National strategi for Datamanagement Input fra Bevaring, Formidling og Genbrug. Birte Christensen-Dalsgaard Det Kongelige Bibliotek

Oversættelse af symbolsk maskinsprog. Sammenkædning og indlæsning af maskinsprog

Hot & New in Symantec Management and Windows Protection

Vejen til privat finansiering. 16. juni 2011

CAMP LOGOS administrated by Boligselskabet Sct. Jørgen (housing agency)

SAS programmer til Proc Means indlæg af Per Andersen / Capgemini Danmark A/S

SAS Education Providing knowledge through global training and certification. SAS Foundation. Kursöversikt 2010

Claus B. Jensen IT Auditor, CISA, CIA

OIO Dekstop applikation

GB INTRODUCTION manual:

Hvis personallisten ikke er ført slik reglene sier, kan Skatteetaten ilegge overtredelsesgebyr.

How To Boot A Cisco Ip Phone From A Cnet Vlan To A Vlan On A Cpower Box On A Ip Phone On A Network With A Network Vlan (Cisco) On A Powerline (Ip Phone) On An

SAP Best Practices. Færdigpakket branchespecifik og brancheovergribende knowhow. Tilgængelighed for SAP-kunder og SAP-partnere

Insurance of Intangible Asset Risks

Revolusjonen COPYRIGHT NOTICE

Agil Business Process Management - i Finans

Too Much. Workmate. A. Listen to Adrian talking about obesity. 1 Who is he especially worried about?

<Matthías saga digitalis 6.0/>

Marie Tygesen Dalsgärd Hansen 18 October 2009 General Observations Head/Neck Connections Joint stability Functional improvements include

Agenda. Nortel Management værktøj til CS1000 Telephony Manager (TM 3.x) Nyheder i TM 3.2 ECM (Enterprise Common Manager) Subscriber Manager

Nyheter i SAS9.4 för programmerare

1) Testing of general knowledge 25%. Each right question counts 1. Each wrong counts 0.5. Empty

MINISTRY OF DEFENCE LANGUAGES EXAMINATIONS BOARD

The modal verbs kan sende modtage Same word for must and may Future expressed without modal verb

Kvalifisering av ny teknologi

Omkostnings- og investeringsteori Efterår 2009 Opgaver

Hvordan påvirker Cloud dine integrasjonsbehov?

Skolestart. Solveig Gaarsmand Skole og Samfund Good ID 2007

2 halvleg. 1 halvleg. Opvarmning. 2 halvleg. 3 halvleg. Advanced & Powerful. Basic PC-based Automation. Diagnose. Online Tools & Add-on s

SRX. SRX Firewalls. Rasmus Elmholt V1.0

Guide til udfyldelse af Learning Agreement Guide to Learning Agreement

Nordic Master in Didactics of Mathematics

An Exploration of the Effects of Performance Appraisal in Municipal Health Services

SATELLITTKOMMUNIKASJON I NORDOMRÅDENE

Professional Diploma In Digital Marketing

Visumansøgninger fra Temarejsers kunder vil blive håndteret af Visumservice ApS.

Business development. Linnea Jacobsen. 1. semester 2014

ActionPhoto International

How To Use Apex (Oracle)

GetProduct. Webservice name: GetProduct. Adress:

Hub North Netværksarrangement d. 14. Juni 2011

Information og dokumentation Ledelsessystem for dokumentstyring Krav

Summary. /3 The purpose of this report was to observe Vestergaard Company A/S s possibilities of

Beyond the Basics: Advanced REPORT Procedure Tips and Tricks Updated for SAS 9.2 Allison McMahill Booth, SAS Institute Inc.

ÆSTETISK INTERAKTION 6 MIE NØRGAARD, SAINT 2012

The Effect of a Classroom Management Intervention Results from an RCT Anders Holm, Maria Keilow, Mette Friis-Hansen, and Rune Kristensen

The fight against ethnocentrism

How to join a waiting list at Findbolig.nu (including student housing)

Features & Fordele river kan udskiftes LED bord kan udskiftes

Pubhub Web Service. E-Book Integration Guide. Retailer Customers. August 2010 v1.3. Pubhub Definition of Terms 1

! Crowdsourcing!the!Library!

Informationsteknologi Personlig identifikation ISO-overensstemmende kørekort Del 4: Prøvningsmetoder

Informationsteknologi Serviceledelse Del 4: Procesreferencemodel

SAS Programming Tips, Tricks, and Techniques

Why Do People Pay the Way They Do: The Case of Cards, Cash, and Internet Banking in the Context

Data Governance, SAS vinkling

Velkommen til Innovation Days PC-based Automation

ENGLISH. Trapeze European User Conference June

Arkivering: Gab, hvor kedeligt kan det blive++..

Skab værdi med Business Intelligence

Informationsteknologi Små computersystemers. Del 251: USB-fæstnet SCSI (UAS)

Subsetting Observations from Large SAS Data Sets

Innovation hvordan holder Radiometer den i live? , Tommy Bysted, Radiometer Medical ApS

SAS Data Integration SAS Business Intelligence

ing Automated Notification of Errors in a Batch SAS Program Julie Kilburn, City of Hope, Duarte, CA Rebecca Ottesen, City of Hope, Duarte, CA

Informationsteknologi Serviceledelse Del 3: Vejledning i definition af emne og brug af ISO/IEC

How To Understand Software Quality

DEFINITE AND INDEFINITE FORM

Using Macros to Automate SAS Processing Kari Richardson, SAS Institute, Cary, NC Eric Rossland, SAS Institute, Dallas, TX

An Introduction to SAS/SHARE, By Example

Informationsteknologi Personlig identifikation ISO-overensstemmende kørekort Del 2: Maskinlæsbare teknologier

Transcription:

DO, DON T og DORF SAS -programmering Copyright 2002-2011, SAS Institute Inc., Cary, NC, USA SAS Institute Inc., SAS Campus Drive, Cary, North Carolina 27513. SAS and all other SAS Institute Inc. product or service names are registered trademarks or trademarks of SAS Institute Inc. in the USA and other countries. indicates USA registration. Other brand and product names are trademarks of their respective companies. Copyright 2011 SAS Institute Inc. All rights reserved.

Formål At fortælle noget om mine tanker i arbejdet med SAS - programmering En udvikling fra SAS version 79.3 til 9.2 (9.3) At alle i lokalet skal se mindst én ting, de ikke vidste om SAS 2

Mit første indtryk SAS Institute har udviklere siddende med fødderne på skrivebordet, mens de tænker over funktioner, som brugerne kan have brug for og vil blive glade for. Et særegent programmeringssprog, der dækker de nødvendige behov for databehandling. Ekstremt fleksibelt i forhold til andre værktøjer (på en mainframe-computer) 3

En quiz her sent på dagen Et SAS -program som man kunne forestille sig det skrevet af en ikke så god SAS -programmør: Hvor mange errors eller warnings fremkommer af det følgende program? 4

Hvor mange fejl? 0-1 1-3 3-5 5-8 8- mange 5

Find en fejl SAS 9.2 %Let DATASÆT=SIMPELBASE ; data tal; do i=1 to ranuni(0)*100 ; n=ranuni(0)*10000 ; output;end; run; data &datasæt ; nummer =1; call missing(of _ALL_); SET "D:\kursus\data\courses.sas7bdat" ; Navn = "Henrik Dorf" ; rc=proc("summary","tal"," ","N","SUM_N"); COMMENT bruges til at fortælle hvilken status en record har ; COMMENT = "OK " ; put ; window hent_dato rows=10 irow=10 #3 @10 "dato" +5 dato ; if _n_=1 then display hent_dato ; Array NUM (*) _Numeric_ ; tal+1; RUN; title "resultatet af proc summary "; proc print data=sum_n ; run; 6

Mere eller mindre end tre fejl? 7

Hvorfor SAS Personlige grunde Programmering på Mainframe Fjerde generations programmeringssprog Har overlevet konkurrence fra APL, pascal, Java, C,C#, med flere Er skalerbart og HW-uafhængigt Potentielt en database uden DBA er Øget personlig produktivitet Man kan men man skal ikke Man skal men man kan slå det fra 8

Performance Programmets performance Jo hurtigere, jo bedre Programmørens performance Jo hurtigere, jo bedre Mindre arbejdstid mere fritid 9

Særegent for SAS First., Last. Flere outputtabeller Lille hukommelsesforbrug ved datahåndtering Formater Samtidig adgang til flere databaser og flere schemas (Tag den frø!) Alle mulige og umulige muligheder Det umulige klarer vi med det samme miraklerne tager lidt længere tid 10

Flere løsninger på samme problem Find antal missing i alle variabler i en SAS -tabel data stat; set sashelp.class end=eof; if age=. then Missing_age+1; if height=. then Missing_height+1; if weight=. then missing_weight+1; if name=" " then missing_name+1; if sex=" " then missing_sex+1; if eof then put _N_ missing_age= missing_height= missing_weight= missing_sex= missing_name= ; run; 11

Resultat Missing_age=0 Missing_height=0 missing_weight=0 missing_sex=0 missing_name=0 NOTE: There were 19 observations read from the data set SASHELP.CLASS. NOTE: The data set WORK.STAT has 19 observations and 10 variables. NOTE: DATA statement used (Total process time): real time cpu time 0.01 seconds 0.01 seconds 12

Flere løsninger på samme problem Trinvis optimering Find antal missing i alle variabler i en SAS -tabel data stat; set sashelp.class end=eof; if age=. then Missing_age+1; if height=. then Missing_height+1; if weight=. then missing_weight+1; if name=" " then missing_name+1; if sex=" " then missing_sex+1; if eof then put _N_ missing_age= missing_height= missing_weight= missing_sex= missing_name= ; run; 13

data stat; set sashelp.class end=eof; if missing(age) then Missing_age+1; if missing(height) then Missing_height+1; if missing(weight) then missing_weight+1; if missing(name) then missing_name+1; if missing(sex) then missing_sex+1; if eof then put _N_ missing_age= missing_height= missing_weight= missing_sex= missing_name= ; run; 14

Ny tabel: nye variable data stat; set sashelp.heart end=eof; 15

Optæl uden navn data stat; set sashelp.class end=eof; array num (*) _numeric_ ; array chr (*) _character_ ; array _miss_ (2,99) _temporary_ ; do _i_=1 to dim(num); If missing(num(_i_)) then _miss_(1,_i_)+1; end; do _i_=1 to dim(chr); if missing(chr(_i_)) then _miss_(2,_i_)+1; end; 16

Præsenter optælling if eof then do; run; end; put _N_= ; do _I_=1 to dim(num); vname=vname(num(_i_)); put vname "=" _miss_(1,_i_) ; end; do _I_=1 to dim(chr); vname=vname(chr(_i_)); put vname "=" _miss_(2,_i_) ; end; output; 17

118 end; 119 do _I_=1 to dim(chr); 120 vname=vname(chr(_i_)); 121 put vname "=" _miss_(2,_i_) ; 122 end; 123 output; 124 end; 125 run; _N_=19 Age =. Height =. Weight =. Name =. Sex =. NOTE: There were 19 observations read from the data set SASHELP.CLASS. NOTE: The data set WORK.STAT has 1 observations and 7 variables. NOTE: DATA statement used (Total process time): real time 0.03 seconds cpu time 0.01 seconds 18

Formater + Proc Freq: proc format ; value $cmiss " "="Missing" other = "Not missing"; value nmiss.="missing" other = "Not missing"; run; proc freq data=sashelp.heart; table _ALL_ / list missing ; format _character_ $cmiss. _numeric_ nmiss. ; run; 19

Formater + Proc Freq: 20

Små nyheder Den bedste måde at blive opdateret på SAS Help What s new in SAS 9.2 21

Små nyheder Den bedste måde at blive opdateret på SAS Help What s new in SAS 9.2 What's New in SAS 9.2 gives you a quick, convenient overview of new functionality, enhanced features, and new products that you might use in SAS 9.2. This document is a compilation of all the What's New topics for products that ship with a SAS release. 22

Små nyheder Den bedste måde at blive opdateret på Proc print blanklines n ; 23

Små store nyheder 24

SAS 9.1 Hent data SAS SAS-program SASsystemet Actio nj Database 25

SAS 9.1 Send forespørgsel modtag svar SAS SAS-program SASsystemet Actio nj Database 26

Mange små nyheder Nye funktioner: Data test ; if num1 ne. Then return=num1 ; else if num2 ne. And return=. Then return=num2 ; else if num3 ne. And return=. Then return=num3 ; Data test ; Run; array num (*) num1-num5; do i=1 to dim(num) return=num(i); if return ne. Then leave; end; Data test ; Run; array num (*) age height weight; do i=1 to dim(num) return=num(i); if return ne. Then leave; end; Data test ; Run; %takefirst(return,num1-num5); 27

Mange små nyheder Nye funktioner: Data test ; if num1 ne. Then return=num1 ; else if num2 ne. And return=. Then return=num2 ; else if num3 ne. And return=. Then return=num3 ; Data test ; Run; Data test ; array num (*) num1-num5; array num (*) age height weight; do i=1 Data to dim(num) test ; do i=1 to dim(num) return=num(i); return=coalesce(num1,num2.num3); return=num(i); if Run; return ne. Then leave; if return ne. Then leave; end; end; Run; Data test ; Run; %takefirst(return,num1-num5); 28

Ny funktion coalesce (og CoalesceC) Data test ; Array num (*) num1-num10; return=coalesce(num1,num2.num3,num4,.); return=coalesce(of num1-num10); return=coalesce(of num(*)); Run; 29

Større nyheder i nyere tid ODS Implicit SQL Nye udviklingsmiljøer: SAS Data Integration Studio, SAS Enterprise Guide Statistical Graphics 30

Andre små nyheder Funktioner Allperm permuteringer : data _null_ ; F1="Rød " ; F2="Blå " ; F3="Grøn"; do while(i<fact(3)) ; I+1; rc=allperm(i,f1,f2,f3); put F1= F2= f3= ; end; run; F1=Rød F2=Blå F3=Grøn F1=Rød F2=Grøn F3=Blå F1=Grøn F2=Rød F3=Blå F1=Grøn F2=Blå F3=Rød F1=Blå F2=Grøn F3=Rød F1=Blå F2=Rød F3=Grøn NOTE: DATA statement used (Total process time): real time 0.00 seconds cpu time 0.01 seconds 31

Andre små nyheder: Options Mcompilenote=all Mautolocdisplay Mexecnote; 93 %macro test; 94 %put %trim( test ) ; 95 %mend; NOTE: The macro TEST completed compilation without errors. 3 instructions 44 bytes. 96 %test; NOTE: The macro TEST is executing from memory. NOTE: The macro TRIM completed compilation without errors. 13 instructions 336 bytes. MAUTOLOCDISPLAY(TRIM): This macro was compiled from the autocall file C:\Program Files\SAS92\SASFoundation\9.2\core\sasmacro\trim.sas NOTE: The macro TRIM is executing from memory. test 32

Paradigmer Opgør med standardmetoder 33

Sortering Undgå sorteringer!! Teknikker til at undgå sorteringer : SQL JOIN kræver ikke sortering» Men den sorterer internt Opret Index» Så returnerer den data i den rette rækkefølge SAS Scalable Performance Data Server» Implicit sortering!! Men hvorfor ikke sortere selv? Eller rettere: planlæg, så data ligger i orden 34

Hold orden Masterdata præsorteret Sorter Merge 35

Hold orden Worst case: data skal sorteres igen Store sorteringer 36

Hukommelse nok Opret tabel Sorter til ny Samlet tid: 160 sek. 37

Sortering For lidt hukommelse (for meget data) Opret tabel Sorter med utility file Kopiering til ny Samlet tid: 230 sek. 38

Sortering Divice and conquer Opsplit data i mange små tabeller, der sorteres SET By returnerer i korrekt rækkefølge Data Result ; SET DS1 DS2 DS3 DS4 DS5 DS6 ; By Key ; RUN: 39

Sortering Divice and conquer Opsplit data i mange små tabeller, der sorteres SET By returnerer i korrekt rækkefølge Data Result ; SET DS1 DS2 DS3 DS4 DS5 DS6 ; By Key ; RUN: 40

Fremtid De ting, jeg synes er spændende og indbyder til at blive undersøgt nærmere lige nu, er: 41

FCMP Mulighed for at lave brugerdefinerede funktioner Mulighed for at afvikle SAS -kode i SAS -kode 42

FCMP En macro med Proc summary %macro summary; %let ds = %sysfunc(dequote(&ds)); %let class = %sysfunc(dequote(&class)); %let var = %sysfunc(dequote(&var)); %let out = %sysfunc(dequote(&out)); proc summary data=&ds Nway; class &class ; var &var ; output out=&out sum= ; run; %mend; 43

FCMP Definition af en funktion proc fcmp outlib = sasuser.ds.functions; function proc (procedure$,ds$,class$,var$,out$); rc = run_macro('summary', ds, class, var, out); return(0); endsub; run; 44

FCMP Anvendelsen af en funktion options cmplib = (sasuser.ds); data test; run; rc=proc("summary","sashelp.class","sex","age HEIGHT WEIGHT","SUM"); 45

FCMP Nyt paradigme Proc Summary Datastep Proc Summary Datastep 46

SGPLOT Statistical Graphics Procedures 47

Nye SAS/GRAPH -procedurer SG SGPLOT SGSCATTER SGPANEL SGRENDER 48

SGPLOT proc sgplot data=sashelp.class; scatter x=height y=weight / group=sex; run; 49

SGPLOT proc sgplot data=sashelp.class; reg x=height y=weight / CLM CLI; run;; 50

SGPLOT God stil grafisk editor 51

Ting, jeg elsker at hade Open empty table 52

Ting, jeg elsker at hade Open empty table Svar: NO! 53

Ting, jeg elsker at hade Resultat en anden tabel, Luk denne tabel 54

Ting, jeg elsker at hade 55

Små irritationer SUBSTR(string, position<,length>) TRANSLATE(source,to-1,from-1<,...to-n,from-n>) TRANSTRN(source,target,replacement) TRANWRD(source,target,replacement) 56

Spørgsmål? 57

Henrik.Dorf@sdk.sas.com Copyright 2011 SAS Institute Inc. All rights reserved.