Introduktion til SAS macro language Ole Steen Senior Principal Consultant Knowledge & Education SAS Institute A/S
Formålet med makro Makro kan kort beskrives som tekstbehandling på et SAS - program, umiddelbart før det eksekveres! Behandling af symboler/tekst Dynamisk generering af kode Automatisk generering af kode Betinget afvikling af kode
Eksempel på program Flere steder skal rettes næste år Dato rettes hver gang Format statement skrives måske flere gange
Eksempel på program Flere steder rettes næste år! Det erstatter vi lige af en makro: Opret macro variable: Anvend macro variable:
Husk! Macro variable er altid tekstværdi Men kan naturligvis indeholde talværdier Når macro variable anvendes, gælder følgende: Macro variable står uden anførselstegn eller Macro variable står i (dobbelt anførselstegn) Kan med fordel efterfølges af. (punktum)
Eksempel på program Dato rettes hver gang Det erstatter vi lige af et makrokald: Kald makro med kald af datastep-funktion:
Husk! Kald af makro sker med % Datastep-funktioner kan kaldes med makroen: %SYSFUNC Resultatet kan afleveres med angivet format
Eksempel på program Format statement skrives måske flere gange Vi skriver lige en makro, så vi kan arbejde lidt hurtigere næste gang!
Endeligt program
Hvad sker der, når et program kører Kør PROC PRINT for senest dannede tabel og skriv navn på tabel i titlen Compiler Word Scanner Macro Processor Symbol Table Input Stack proc print data=&syslast; title "Listing of &syslast"; SYSDAY SYSLAST Tuesday ORION.ALL run;
Hvad sker der, når et program kører Kode uden % eller & scannes og compileres Compiler proc print data= Word Scanner Macro Processor Symbol Table Input Stack &syslast; title "Listing of &syslast"; SYSDAY SYSLAST Tuesday ORION.ALL run;
Hvad sker der, når et program kører Kode med % eller & håndteres af macro processor Compiler proc print data= Word Scanner Macro Processor &syslast Symbol Table Input Stack ; title "Listing of &syslast"; SYSDAY SYSLAST Tuesday ORION.ALL run;
Hvad sker der, når et program kører Kode med % eller & håndteres af macro processor Compiler proc print data= Word Scanner Macro Processor &syslast Symbol Table Input Stack ; title "Listing of &syslast"; SYSDAY SYSLAST Tuesday ORION.ALL run;
Hvad sker der, når et program kører Macro processor henter værdier fra symboltabel og sender til input stack Compiler proc print data= Word Scanner Macro Processor &syslast Symbol Table Input Stack ORION.ALL; title "Listing of &syslast"; SYSDAY SYSLAST Tuesday ORION.ALL run;
Hvad sker der, når et program kører Hvorefter programmet fortsætter Compiler proc print data=orion.all; Word Scanner Macro Processor Symbol Table Input Stack title "Listing of &syslast"; run; SYSDAY SYSLAST Tuesday ORION.ALL
Hvad sker der, når et program kører Når der nås til run, eksekveres programmet Compiler proc print data=orion.all; title "Listing of ORION.ALL"; Word Scanner run; Macro Processor Symbol Table Input Stack SYSDAY SYSLAST Tuesday ORION.ALL
Rigtige programmører koder makro! Velkommen på makrokursus 8. juni 2009 (Skanderborg) 17. juni 2009 (København) 22. juli 2009 (København). Der kommer helt sikkert flere i fremtiden!
Ole Steen sdkols@sdk.sas.com