Dan dine egne SAS - funktioner med PROC FCMP Karsten Lund, chefkonsulent PS Commercial / Life Sciences
Fordele og ulemper ved at anvende PROC FCMP Fordele ved at anvende PROC FCMP Bedre mulighed for at opbygge ETL jobs i moduler Bedre mulighed for at teste programmer Mere læsevenlige programmer Bedre muligheder for god program dokumentation Ulemper ved at anvende PROC FCMP Umiddelbart ingen
SASHELP.CLASS
Function BMI, version 1 Proc fcmp outlib=sasfunc.functions.test; function BMI (height,weight); bmi = weight / ( height * height ); return(bmi); quit; endsub;
Example1.sas 1 2 3 4 5
Log of Example1.sas
Function BMI, version 2 Proc fcmp outlib=sasfunc.functions.test; function BMI (height,weight,obs,ds $); h=height; w=weight; Kald af egne funktioner i en funktion if (h gt 10 and w gt 50) then do; h=std_units(h, inch, m ); w=std_units(w, pound, kg ); end; if (1.20 lt h lt 2.20 and 34 lt w) then bmi=w/(h*h); quit; if bmi eq. then call miss_handle(ds,obs,error_con,input_values); return(bmi); endsub;
Function std_units proc fcmp outlib=sasfunc.functions.test; function std_units(value,unit_in $,unit_out $); out_val=.; Kald af en SAS -makro i en funktion rc=run_macro('fetch_std_units',unit_in,unit_out, Conversion_factor); if rc=0 then out_val=value*conversion_factor; quit; endsub; return(out_val);
Subroutine miss_handle proc fcmp outlib=sasfunc.functions.test; subroutine miss_handle(ds $,obs,error_con $,input_values $); Kald af en SAS -makro i en funktion rc=run_sasfile('miss_pgm',ds,obs,error_con, input_values); quit; endsub;
Example2.sas 1 2 3 4 5
Log of Example2.sas
PROC FCMP Performance Nødvendige overvejelser Funktioner afvikles én gang for hvert kald til en funktion Tidsrøvere: Kald af interne SAS -funktioner som put datetime() Kald af makroer Brug af eksterne filer PROC FCMP er hurtig til de fleste øvrige datastep statements Forandringerne fra datastep er små PROC FCMP-funktioner uden syntaksfejl er ikke synlige i log
Del funktioner i organisationen Skriv og test egne funktioner lokalt Del via SAS Global option CMPLIB i SAS config-fil cmplib = sasuser.funcs; cmplib = (sasuser.funcs work.functions mycat.funcs); cmplib = sasuser.func1 - sasuser.func10;
Find SAS FCmp Function Editor
SAS FCmp Function Editor
Afrunding Ny funktionalitet i SAS 9.2, PROC FCMP. Forhåbentlig har dette indlæg vagt jeres interesse for PROC FCMP, så I har fået lyst til selv at lave funktioner I morgen kl. 13:00 ligeledes i sal 3 vil Jørgen Boysen vise, hvordan PROC FCMP bliver anvendt hos DONG Energy i Dramex-projektet Kodeeksempler findes i print her i salen og vil være tilgængelige på SAS Forums hjemmeside www.sasforum.dk Send mig eventuelt en e-mail, og jeg fremsender gerne dette indlæg og kodeeksempler
Referencer og links Eberhardt, Peter. 2010. Functioning at an Advanced Level: PROC FCMP and PROC PROTO http://support.sas.com/resources/papers/proceedings10/024-2010.pdf Eberhardt, Peter. 2009. A Cup of Coffee and Proc FCMP: I Cannot Function Without Them. http://support.sas.com/resources/papers/proceedings09/147-2009.pdf. Secosky, Jason. 2007. User-Written DATA Step Functions. http://www2.sas.com/proceedings/forum2007/008-2007.pdf. Stacey M. Christian and Jacques Rioux, 2010 Adding Statistical Functionality to the DATA Step with PROC FCMP http://support.sas.com/resources/papers/proceedings10/327-2010.pdf
Karsten Lund karsten.lund@sdk.sas.com