Download presentation
Presentation is loading. Please wait.
Published byAna Whittingham Modified over 9 years ago
1
Copyright © 2006, SAS Institute Inc. All rights reserved. Proc FCMP – Data Step Functions Denise.Poll@sas.com
2
Copyright © 2006, SAS Institute Inc. All rights reserved. What is Proc FCMP? “SAS Function Compiler” Build functions using DATA step syntax Store the functions in a data set Call the functions from the DATA step just as you would any other SAS function Lots more capabilities, just not covered today
3
Copyright © 2006, SAS Institute Inc. All rights reserved. Proc FCMP - History Prior to Version 9.2 – Limited to Product Procs SAS/STAT SAS/ETS SAS/OR Post 9.2 available – Data step syntax
4
Copyright © 2006, SAS Institute Inc. All rights reserved. Advantages of Writing Your Own Functions Function makes a program easier to read, write and modify Reuse and quality control Test once use many times Program/function independence
5
Copyright © 2006, SAS Institute Inc. All rights reserved. Syntax to Create a Function - 3 level name Proc FCMP outlib = << Ids where to store sasuser.MySubs.MathFncs; << DS and package function day_date( indate, type $); if type = "DAYS" then wkday = weekday(indate); if type = "YEARS" then wkday = weekday(indate*365); return(wkday); endsub; run;
6
Copyright © 2006, SAS Institute Inc. All rights reserved. Outlib – 3 Level Name - Package Proc FCMP outlib = sasuser.MySubs.MathFncs; Library Dataset Package – collection of related functions Could be by organized by application or by corporate department
7
Copyright © 2006, SAS Institute Inc. All rights reserved. Pieces and Parts 4 parts between FUNCTION statement ENDSUB keyword Function name −day_date One or more parameters −( indate, type $); A body of code A RETURN statement −return(wkday);
8
Copyright © 2006, SAS Institute Inc. All rights reserved. Syntax to Create a Function – Statement & Name Proc FCMP outlib = sasuser.MySubs.MathFncs; function day_date( indate, type $); << stmt & name if type = "DAYS" then wkday = weekday(indate); if type = "YEARS" then wkday = weekday(indate*365); return(wkday); endsub; run;
9
Copyright © 2006, SAS Institute Inc. All rights reserved. Syntax to Create a Function – Naming function day_date( indate, type $); << stmt & name Cannot have a function name that collides with a built-in SAS function name. An error message is generated if an attempt is made. Name must be unique in the package 2 packages with the same name – qualify name when calling MathFncs.day_date
10
Copyright © 2006, SAS Institute Inc. All rights reserved. Syntax to Create a Function - Arguments function day_date( indate, type $); << arguments function coffee_deal() $ ; << no argument Can have one or more arguments for a function. Specify character arguments by placing a dollar sign ($) after the argument name. In the above example: indate is numeric and type is a character argument
11
Copyright © 2006, SAS Institute Inc. All rights reserved. Syntax to Create a Function – Logic The DAY_DATE function converts a date to a numeric day of the week if type = "DAYS" then wkday = weekday(indate); if type = "YEARS" then wkday = weekday(indate*365);
12
Copyright © 2006, SAS Institute Inc. All rights reserved. Usage of SAS Function - weekday Proc FCMP outlib = sasuser.MySubs.MathFncs; function day_date( indate, type $); if type = "DAYS" then wkday = weekday(indate); if type = "YEARS" then wkday = weekday(indate*365); return(wkday); endsub; run;
13
Copyright © 2006, SAS Institute Inc. All rights reserved. Syntax to Create a Function – Return Proc FCMP outlib = sasuser.MySubs.MathFncs; function day_date( indate, type $); if type = "DAYS" then wkday = weekday(indate); if type = "YEARS" then wkday = weekday(indate*365); return(wkday); <<Returns a numeric value endsub; run;
14
Copyright © 2006, SAS Institute Inc. All rights reserved. Calling the Function Options cmplib = sasuser.mysubs; Data work.usefunc; Numdays = day_date(‘13sep2011’d,”DAYS”); Put numdays=; run; Numdays = 3
15
Copyright © 2006, SAS Institute Inc. All rights reserved. Options CMPLIB = Options cmplib = sasuser.mysubs; CMPLIB is a SAS option that supports usage with INSERT and APPEND Options insert=(cmplib=sasuser.meFirst) ; Options append=(cmplib=sasuser.meLast);
16
Copyright © 2006, SAS Institute Inc. All rights reserved.
19
Nesting and Scope
20
Copyright © 2006, SAS Institute Inc. All rights reserved. Nesting and Scope DATA Step funA funB
21
Copyright © 2006, SAS Institute Inc. All rights reserved. Scope – Independent “x” Variable function funB(value); x = value * 100; put 'In funB:' x=; return (x); endsub; function funA(value); x = value; put 'In funA:' x=; y = funB(x); return (y*10); endsub; data _null_; x = funA(5); put 'In DATA Step: ' x=; run;
22
Copyright © 2006, SAS Institute Inc. All rights reserved. Scope – Usage data _null_; x = funA(5); put 'In DATA Step:‘ x=; run; Output to the SAS Log: In funA: x=5 In funB: x=500 In DATA Step: x=5000
23
Copyright © 2006, SAS Institute Inc. All rights reserved. Function Management Protecting Functions Listing the Source Adding a Function Removing a Function Replacing a Function
24
Copyright © 2006, SAS Institute Inc. All rights reserved. Protecting Functions Operating System File Permissions Unix: chmod Windows: attrib z/OS: RACF libname perm "\\shared\perm" access=readonly; SAS/Share Read-Only Library
25
Copyright © 2006, SAS Institute Inc. All rights reserved. Listing the Function Source proc fcmp outlib=sasuser.funcs.trial; listfunc study_day;
26
Copyright © 2006, SAS Institute Inc. All rights reserved. Adding a Function proc fcmp outlib=sasuser.funcs.trial; function study_day(start, event); n = event – start; if n >= 0 then n = n + 1; return(n); endsub;
27
Copyright © 2006, SAS Institute Inc. All rights reserved. Removing a Function proc fcmp outlib=sasuser.funcs.trial; deletefunc study_day;
28
Copyright © 2006, SAS Institute Inc. All rights reserved. Replacing a Function proc fcmp outlib=sasuser.funcs.trial; deletefunc study_day; function study_day(start, event);...
29
Copyright © 2006, SAS Institute Inc. All rights reserved. Replacing a Function
30
Copyright © 2006, SAS Institute Inc. All rights reserved. Proc FCMP - Data Step Statements Not Supported Data Set Merge Update Modify Input Infile (thru functions OPEN-FETCH, …)
31
Copyright © 2006, SAS Institute Inc. All rights reserved. Proc FCMP – Power of Put Use Put for debugging Results of a Put statement can go to the PRINT (default) and LOG destinations … FILE log; Put variable ;
32
Copyright © 2006, SAS Institute Inc. All rights reserved. Acknowledgements and Questions Thanks to GASUG for the invitation to present! Thanks to Jason Secosky who provided a subset of the material for this presentation
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.