Presentation laddar. Vänta.

Presentation laddar. Vänta.

Träning 13 Makroprogrammering

Liknande presentationer


En presentation över ämnet: "Träning 13 Makroprogrammering"— Presentationens avskrift:

1 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.

2 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

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

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

6 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

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 <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

8 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

9 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

10 Makrokommandon SAS programmering 2015

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

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

14 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

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

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); 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

17 Makron i Help Undersök HelpBase SASSAS Macro Reference
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 SAS programmering 2015

19 Ö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

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


Ladda ner ppt "Träning 13 Makroprogrammering"

Liknande presentationer


Google-annonser