copyright © 2006, sas institute inc. all rights reserved. proc fcmp – data step functions...
Post on 14-Dec-2015
223 Views
Preview:
TRANSCRIPT
Copyright © 2006, SAS Institute Inc. All rights reserved.
Proc FCMP – Data Step FunctionsDenise.Poll@sas.com
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
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
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
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;
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
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);
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;
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
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
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);
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;
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;
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
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);
Copyright © 2006, SAS Institute Inc. All rights reserved.
Copyright © 2006, SAS Institute Inc. All rights reserved.
Copyright © 2006, SAS Institute Inc. All rights reserved.
Copyright © 2006, SAS Institute Inc. All rights reserved.
Nesting and Scope
Copyright © 2006, SAS Institute Inc. All rights reserved.
Nesting and Scope
DATAStep
funAfunB
Copyright © 2006, SAS Institute Inc. All rights reserved.
Scope – Independent “x” Variablefunction 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;
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
Copyright © 2006, SAS Institute Inc. All rights reserved.
Function Management
Protecting Functions
Listing the Source
Adding a Function
Removing a Function
Replacing a Function
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
Copyright © 2006, SAS Institute Inc. All rights reserved.
Listing the Function Source
proc fcmp outlib=sasuser.funcs.trial;
listfunc study_day;
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;
Copyright © 2006, SAS Institute Inc. All rights reserved.
Removing a Function
proc fcmp outlib=sasuser.funcs.trial;
deletefunc study_day;
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);
...
Copyright © 2006, SAS Institute Inc. All rights reserved.
Replacing a Function
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, …)
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 ;
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
top related