While working with another customer to use the sample code provided, we had to make a few modifications to make it work in an RTDM 6.5 SAS Process.
Here is the revised sample code:
package GBM_Model/overwrite=yes;
/* declare a logger */
declare package logger m_logger('morglum.GBM_Model');
/* set logging methods */
method trace(varchar(32767) msg);
m_logger.log(2, msg);
end;
method debug(varchar(32767) msg);
m_logger.log(3, msg);
end;
method err(varchar(32767) msg);
m_logger.log(6, msg);
end;
method isTraceEnabled() returns int;
return m_logger.islevelactive(2);
end;
method isDebugEnabled() returns int;
return m_logger.islevelactive(3);
end;
/* execute method which gets called by RTDM - the inputs here need to be defined in the RTDM Activity and
values passed from the decision flow */
method execute( char(10) gender,
char(30) education,
int age_years,
in_out double predicted_wages
);
/* log messages */
if isDebugEnabled() then
debug('Entered Execute Method');
/* optional trace messages - maybe not great if there are 100s of inputs */
if isTraceEnabled() then
do;
trace('Input gender:' || gender);
trace('Input education:' || education);
trace('Input age_years:' || age_years);
end;
/* Model IF-THEN-ELSE rules */
if (gender EQ 'Male' and education = 'university' and age_years > 50) then
/* if only one output variable the wont need a do block, just set the variable after then on the line above */
do;
/* set outputs */
predicted_wages = 45001.10 ;
end;
else if (gender EQ 'Female' and education = 'university' and age_years > 50) then
do;
/* set outputs */
predicted_wages = 45002.10 ;
end;
else
/* final block */
do;
predicted_wages = 0.0;
end;
/* End of Model IF-THEN-ELSE rules */
/* log messages */
if isDebugEnabled() then
debug('Finished Execute Method');
if isTraceEnabled() then
do;
trace('Output predicted_wages:'|| predicted_wages);
end;
end;
endpackage;
run;
quit;
/* code to test with your Federation Server via SAS Studio or EG */
proc ds2 nolibs NOPROMPT="driver=remts;server=your-fed-server;port=24141;protocol=bridge;uid=your-user;pwd=your-pw;conopts=(driver=ds2;conopts=(DSN=BASE_DSN))";
data _null_;
method run();
declare package GBM_Model GBMM();
declare double pw;
GBMM.execute('Male', 'university', 51, pw);
put pw=;
GBMM.execute('Female', 'university', 64, pw);
put pw=;
GBMM.execute('Male', 'high school', 51, pw);
put pw=;
end;
enddata;
run;
quit;
... View more