Presentation is loading. Please wait.

Presentation is loading. Please wait.

Copyright © 2006, SAS Institute Inc. All rights reserved. Proc FCMP – Data Step Functions

Similar presentations


Presentation on theme: "Copyright © 2006, SAS Institute Inc. All rights reserved. Proc FCMP – Data Step Functions"— Presentation transcript:

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.

17

18

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


Download ppt "Copyright © 2006, SAS Institute Inc. All rights reserved. Proc FCMP – Data Step Functions"

Similar presentations


Ads by Google