Träning 13 Makroprogrammering Detta är en mall för att göra PowerPoint presentationer. Du skriver in din rubrik på första sidan. För att skapa nya sidor, tryck Ctrl+M. Skriv sedan in din text. Om du vill ha fast datum, eller ändra författarnamn, gå in under Visa, Sidhuvud och Sidfot. Vill du använda hörnet med loggan över en utfallande bild, gå in på Bildbakgrund och kopiera. Klistra sedan in på den sida du vill ha den.
Makroprogrammering Makrokoden är ett sätt att generera en SAS-kod Användning av makrot brukar reducera kodskrivning betydligt Möjlighet att skapa smidiga koder SAS-kod Exekvering Kompilering Nya mängder, utskrifter osv Makrokod SAS programmering 2015
Makrovariabler Man kan definiera makrovariabler för att använda dem senare i koden: %LET makronamn=uttryck; Använd & för att referera till en makrovariabel %let var_list = RBC WBC Chol; title "Using a Macro Variable List"; proc means data=learn.blood n mean min max maxdec=1; var &var_list; run; Var det nyttigt att skapa en makrovariabel här? SAS programmering 2015
Makrovariabler SAS programmering 2015
Inbyggda makronamn &sysdate - datum sessionen startade &systime - tid sessionen startade &sysday – veckodag title "The Date is &sysdate9 - the Time is &systime"; proc print data=learn.test_scores noobs; run; SAS programmering 2015
Makron %macro macronamn <(variabellista)>; Ett makro är en struktur som tillåter att generera en SAS kod Se ut som en procedur i vanliga programmeringsspråk såsom C eller Java %macro macronamn <(variabellista)>; …. %mend macronamn Anropa makrot: %macronamn; %macro gen(n); data generate; do r = 1 to &n; x = sqrt(r); output; end; run; %mend gen; %gen(4); Kompilering av detta makro= ersätta n med 4, Exekvering= kör koden SAS programmering 2015
Debugging Makrokoden blir sällan 100% rätt För att kunna skicka själva SAS koden eller värdena på makrovariabler till log använd Options <option>; mprint skriver SAS koden till loggen (motsats nomprint) mlogic Detaljerad utskrift av hur makro har fungerat (motsats nomlogic) symbolgen visar värdena på makrovariabler options mprint symbolgen; %macro gen(n); … samma kod som förut SAS programmering 2015
Makron Det finns parametrar som alltid står på en bestämd plats och de som kan stå var som helst: %macro gen(factor, Start=1, End=); data generate; do r = &Start to &End; x = &factor*sqrt(r); output; end; run; %mend gen; %gen(1,End=6); SAS programmering 2015
Makrokommandon För att ändra kompilerarens vanliga beteendet kan man använda makrokommandon %IF… %THEN…; %ELSE… ; %DO … %END; %DO namn=… %TO …;…; %END; %macro divide; %DO g= 1 %to 4; data grupp&g; set learn.blood; array groups[4] $ _temporary_ ('A' 'AB' 'B' 'O'); if bloodtype eq groups{&g}; run; %END; %mend divide; SAS programmering 2015
Makrokommandon SAS programmering 2015
Använda makronamn som en del av SAS namn Vad kommer survey2..&lib att översättas till? Alternativ: <sasnamn>¯onamn; /*Länka samman*/ <¯onamn>.<sasnamn>; /*Länka samman*/ <¯onamn>..<sasnamn>; /*om det behövs punkt mellan macronamn och sasnamn*/ %macro question(lib, variabel, index); data question&index; set &lib..survey2; keep &variabel.&index; run; %mend question; %question(learn,Q,1); SAS programmering 2015
Använda makronamn som en del av SAS namn Att räkna ut ordningsstatistik %let myname=S; %macro ordning; data surveyscore; set learn.survey2; %do i=1 %to 5; &myname.&i=largest(&i, of Q1-Q5); %end; run; %mend ordning; %ordning; SAS programmering 2015
Citationstecken Om man använder makronamn i en textsträng, då måste man använda dubbla citationstecken: %Let filen=gym; data _null_; file "Z:\732G17\2011\Traning 13\&filen..txt"; set learn.&filen; put Subj--Fee; run; SAS programmering 2015
Makron Makron behöver inte innehålla fullständiga programsatser Makron kan anropas var som helst %macro namn(antal); %Do i=1 %to &antal; +&i.*Q&i %end; ; %mend namn; data new; set learn.survey2; Score=%namn(5); run; SAS programmering 2015
Makrovariabler och datasteget Om man vet vilket värde en makrovariabel skulle ha Använd typ %LET var=17; Om makrovariabelns värde skulle bli lika med ett värde på en annan variabel använd CALL SYMPUT(’macronamn’, variabelnamn) Om makronamnet sparas i en annan variabel, kan man få makrovariabelns värde genom CALL SYMGET(variabel) Varför kan man inte skriva %let macronamn=variabelnamn ? SAS programmering 2015
SYMPUT proc means data=learn.blood noprint; var RBC WBC; output out=means mean= M_RBC M_WBC; run; data _null_; set means; call symput('AveRBC',M_RBC); call symput('AveWBC',M_WBC); data new; set learn.blood(obs=5 keep=Subject RBC WBC); Per_RBC = RBC / &AveRBC; Per_WBC = WBC / &AveWBC; format Per_RBC Per_WBC percent8.; SAS programmering 2015
Makron i Help Undersök HelpBase SASSAS Macro Reference SAS programmering 2015
Övningar (Prio 1) Övning 4 sida 534 (Prio 2) Skriv ett makro som beror på parametern plats och gör följande: Om plats=’XLS’ då sparas learn.blood som en Excel fil Annars sparas learn.blood som en CSV fil SAS programmering 2015
Övningar (Prio 1) (Prio 2) Skriv ett makro som räknar ut N:te ruten ur x för alla x från 1 till 100. Resultatet är en tabell med kolumnerna P1,..P10 där varje kolumn visar motsvarande ruten. TIPS1: Variera x med en vanlig DO loop och kolumnindex med %DO loopen TIPS2: 5te ruten ur x skrivs i SAS som x**(1/5) (Prio 2) Övning 5 sida 534 SAS programmering 2015
Läsa hemma Kapitel 25 SAS Help SAS programmering 2015