Presentation laddar. Vänta.

Presentation laddar. Vänta.

1 Träning 13 Makroprogrammering. 2 SAS programmering 2015 Makroprogrammering Makrokoden är ett sätt att generera en SAS-kod  Användning av makrot brukar.

Liknande presentationer


En presentation över ämnet: "1 Träning 13 Makroprogrammering. 2 SAS programmering 2015 Makroprogrammering Makrokoden är ett sätt att generera en SAS-kod  Användning av makrot brukar."— Presentationens avskrift:

1 1 Träning 13 Makroprogrammering

2 2 SAS programmering 2015 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 Makrokod SAS-kod Nya mängder, utskrifter osv Kompilering Exekvering

3 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; 3 SAS programmering 2015 Var det nyttigt att skapa en makrovariabel här?

4 Makrovariabler 4 SAS programmering 2015

5 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; 5 SAS programmering 2015

6 Makron 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 ; …. %mend macronamn Anropa makrot: %macronamn; 6 SAS programmering 2015 %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

7 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 ; 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 … 7 SAS programmering 2015

8 Makron Det finns parametrar som alltid står på en bestämd plats och de som kan stå var som helst: 8 SAS programmering 2015 %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);

9 Makrokommandon För att ändra kompilerarens vanliga beteendet kan man använda makrokommandon  %IF… %THEN…; %ELSE… ;  %DO … %END;  %DO namn=… %TO …;…; %END; 9 SAS programmering 2015 %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;

10 Makrokommandon 10 SAS programmering 2015

11 Använda makronamn som en del av SAS namn Alternativ:  ¯onamn; /*Länka samman*/ . ; /*Länka samman*/ .. ; /*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); 11 SAS programmering 2015 Vad kommer survey2.. &lib att översättas till?

12 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; 12 SAS programmering 2015

13 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; 13 SAS programmering 2015

14 Makron Makron behöver inte innehålla fullständiga programsatser Makron kan anropas var som helst %macro namn(antal); 0 %Do i=1 %to &antal; +&i.*Q&i %end; ; %mend namn; data new; set learn.survey2; Score=%namn(5); run; 14 SAS programmering 2015

15 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) 15 SAS programmering 2015 Varför kan man inte skriva %let macronamn=variabelnamn ?

16 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); run; 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.; run; 16 SAS programmering 2015

17 Makron i Help Undersök Help  Base SAS  SAS Macro Reference 17 SAS programmering 2015

18 Ö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 18 SAS programmering 2015

19 Övningar (Prio 1) 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 SAS programmering 2015

20 Läsa hemma Kapitel 25 SAS Help 20 SAS programmering 2015


Ladda ner ppt "1 Träning 13 Makroprogrammering. 2 SAS programmering 2015 Makroprogrammering Makrokoden är ett sätt att generera en SAS-kod  Användning av makrot brukar."

Liknande presentationer


Google-annonser