Creates DATA step statements to compute the predicted values of a model that you create using the SEVERITY procedure.
specifies the name of the parameter estimations output data. This data set is created when you specify the OUTEST= option in the PROC SEVERITY statement.
specifies the name of the model information output data set. This data set is created when you specify the OUTMODELINGINFO= option in the PROC SEVERITY statement.
specifies the fileref that defines the location of the macro output files.
Default | The SAS log |
specifies a prefix for the predicted dependent variable. The variable is named in the PROC SEVERITY LOSS= statement. When is prefix is applied to the dependent variable, this new name becomes the prediction variable.
Default | P_ |
%let MyProj = C:\Users\sasdemo; libname Severity "&MyProj.\Severity\Test"; data Severity.phf; /* Regression Coefficient for the Intercept Term */ retain fIntercept 6.8024; /* Regression Coefficient for continuous AgeDriver */ retain fAgeDriver 0.01234; /* Regression Coefficient for the three dummy indicators for nominal CarType */ retain fCarType_SEDAN 0; retain fCarType_SPORT 1.0; retain fCarType_TRUCK 0.5; /* Regression Coefficient for the two dummy indicators for nominal Gender */ retain fGender_Female -1.5; retain fGender_Male 0; /* Regression Coefficient for the two dummy indicators for nominal HomeOwner */ retain fHomeOwner_NO 0; retain fHomeOwner_YES 0.7; /* Regression Coefficient for continuous IS */ retain fIS -0.00456; /* Regression Coefficient for continuous MileageDriven */ retain fMileageDriven 0.013579; /* Variable Labels */ label AgeDriver = 'Age of Driver'; label AmountLoss = 'Amount of Loss in Dollars'; format AmountLoss dollar.; label CarType_SEDAN = 'Indicator of Car Type is Sedan'; label CarType_SPORT = 'Indicator of Car Type is Sport'; label CarType_TRUCK = 'Indicator of Car Type is Truck'; label EExp = 'Earned Exposure in Units of One Year'; label ExpYr = 'Exposure Year'; label Gender_Female = 'Indicator of Gender is Female'; label Gender_Male = 'Indicator of Gender is Male'; label HomeOwner_NO = 'Indicator of Home Ownership is No'; label HomeOwner_YES = 'Indicator of Home Ownership is Yes'; label IS = 'Insurance Score of Driver'; label MileageDriven = 'Mileage Driven in Units of 1,000 Miles'; label PolicyId = 'Policy Identifier'; call streaminit(27513); do PolicyId = 00001 to 00099; StartYr = 2000 + rand('table', 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1); do ExpYr = StartYr to 2011; EExp = rand('uniform'); AgeDriver = 18 + rand('binomial',0.375, 72); CarType_SEDAN = 0; CarType_SPORT = 0; CarType_TRUCK = 0; select (rand('table', 0.4999, 0.2999, 0.1999, 0.0003)); when (1) CarType_SEDAN = 1; when (2) CarType_SPORT = 1; when (3) CarType_TRUCK = 1; otherwise do; CarType_SEDAN = .; CarType_SPORT = .; CarType_TRUCK = .; end; end; Gender_Female = 0; Gender_Male = 0; if (EExp lt 0.4999) then Gender_Female = 1; else if (EExp lt 0.9999) then Gender_Male = 1; else do; Gender_Female = .; Gender_Male = .; end; HomeOwner_NO = 0; HomeOwner_YES = 0; if (rand('bernoulli', 0.25) eq 1) then HomeOwner_YES = 1; else HomeOwner_NO = 1; IS = round(rand('gamma', 600)); if (IS gt 800) then IS = 800; else if (IS lt 1) then IS = 1; MileageDriven = rand('gamma', 12); /* Annual Mileage Driven in unit of 1000 miles */ if (nmiss(MileageDriven,AgeDriver,CarType_SEDAN,CarType_TRUCK, CarType_SPORT, Gender_Male,Gender_Female, HomeOwner_YES,HomeOwner_NO,IS) eq 0) then do; mu = fIntercept + fAgeDriver * (28 - AgeDriver) + fCarType_SEDAN * CarType_SEDAN + fCarType_SPORT * CarType_SPORT + fCarType_TRUCK * CarType_TRUCK + fGender_Female * Gender_Female + fGender_Male * Gender_Male + fHomeOwner_NO * HomeOwner_NO + fHomeOwner_YES * HomeOwner_YES + fIS * IS + fMileageDriven * (MileageDriven - 12); AmountLoss = exp(mu) * rand('gamma', 25); end; else AmountLoss = .; output; end; end; drop fAgeDriver fCarType_SEDAN fCarType_TRUCK fCarType_SPORT fGender_Male fGender_Female fHomeOwner_YES fHomeOwner_NO fIntercept fIS fMileageDriven; drop mu StartYr; run;
%let MyProj = C:\Users\sasdemo; libname Severity "&MyProj.\Severity\Test"; title "SCALEMODEL and all applicable distributions"; %let model = 1; %let predlist = AgeDriver CarType_SEDAN CarType_TRUCK CarType_SPORT Gender_Male Gender_Female HomeOwner_YES HomeOwner_NO IS MileageDriven; /* Build the model and obtain the required datasets */ proc severity data = Severity.phf outest = Severity.ParamEst_&Model. outmodelinfo = Severity.ModelInfo_&model.; loss AmountLoss; dist _predefined_ stweedie; scalemodel &predlist.; nloptions maxiter = 1000; run; /* Define the fileref for the output syntax */ filename ThisFile "&MyProj.\Severity\Test\ScoreCode_&Model..sas"; /* Invoke the macro */ %mm_severity_create_scorecode ( ParamEst = Severity.ParamEst_&Model., ModelInfo = Severity.ModelInfo_&model., FileRef = ThisFile, PredPrefix = MyPred_ ); /* Execute the score codes within a DATA STEP */ data Severity.phf_wPrediction; set Severity.phf; %include ThisFile; run; proc contents data = Severity.phf_wPrediction; run;
/**********************************************************************/ /* Begin scoring code for SEVERITY */ /* Created By: sasdemo */ /* Date: June 30, 2015 */ /* Time: 12:06:28 */ /**********************************************************************/ LENGTH _WARN_ $ 4; _WARN_ = ' '; LABEL _WARN_ = "Warnings" ; _nInputMiss = 0; /**********************************************************************/ /* Check the SCALEMODEL regression variables */ /**********************************************************************/ IF ( MISSING( MileageDriven ) EQ 1 ) THEN _nInputMiss = _nInputMiss + 1; IF ( MISSING( IS ) EQ 1 ) THEN _nInputMiss = _nInputMiss + 1; /* NOTE: HomeOwner_NO is not checked for missing values because it is a redundant regressor. */ IF ( MISSING( HomeOwner_YES ) EQ 1 ) THEN _nInputMiss = _nInputMiss + 1; /* NOTE: Gender_Female is not checked for missing values because it is a redundant regressor. */ IF ( MISSING( Gender_Male ) EQ 1 ) THEN _nInputMiss = _nInputMiss + 1; IF ( MISSING( CarType_SPORT ) EQ 1 ) THEN _nInputMiss = _nInputMiss + 1; IF ( MISSING( CarType_TRUCK ) EQ 1 ) THEN _nInputMiss = _nInputMiss + 1; /* NOTE: CarType_SEDAN is not checked for missing values because it is a redundant regressor. */ IF ( MISSING( AgeDriver ) EQ 1 ) THEN _nInputMiss = _nInputMiss + 1;
/**********************************************************************/ /* Calculate scores only if current record contains valid values */ /**********************************************************************/ IF ( _nInputMiss EQ 0 ) THEN DO; /**********************************************************************/ /* Distribution: BURR */ /**********************************************************************/ _XBETA_ = 0; _XBETA_ = _XBETA_ + 1.401229993940100E-02 * MileageDriven ; _XBETA_ = _XBETA_ - 4.744055757460300E-03 * IS ; /* NOTE: HomeOwner_NO is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ + 7.381815343018200E-01 * HomeOwner_YES ; /* NOTE: Gender_Female is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ + 1.495958484730900E+00 * Gender_Male ; _XBETA_ = _XBETA_ + 9.886615491163800E-01 * CarType_SPORT ; _XBETA_ = _XBETA_ + 4.731784863675400E-01 * CarType_TRUCK ; /* NOTE: CarType_SEDAN is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ - 1.066440552950800E-02 * AgeDriver ; MyPred_AmountLoss_BURR = 6.236121394142300E+03 * EXP(_XBETA_); /**********************************************************************/ /* Distribution: EXP */ /**********************************************************************/ _XBETA_ = 0; _XBETA_ = _XBETA_ + 1.364239152005100E-02 * MileageDriven ; _XBETA_ = _XBETA_ - 4.739639251429400E-03 * IS ; /* NOTE: HomeOwner_NO is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ + 7.307690977221500E-01 * HomeOwner_YES ; /* NOTE: Gender_Female is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ + 1.496025385765200E+00 * Gender_Male ; _XBETA_ = _XBETA_ + 9.916620991492000E-01 * CarType_SPORT ; _XBETA_ = _XBETA_ + 4.644249484904200E-01 * CarType_TRUCK ; /* NOTE: CarType_SEDAN is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ - 1.151946645256000E-02 * AgeDriver ; MyPred_AmountLoss_EXP = 6.506747031895200E+03 * EXP(_XBETA_); /**********************************************************************/ /* Distribution: GAMMA */ /**********************************************************************/ _XBETA_ = 0; _XBETA_ = _XBETA_ + 1.364239160569600E-02 * MileageDriven ; _XBETA_ = _XBETA_ - 4.739639073904200E-03 * IS ; /* NOTE: HomeOwner_NO is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ + 7.307690978471100E-01 * HomeOwner_YES ; /* NOTE: Gender_Female is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ + 1.496025385874300E+00 * Gender_Male ; _XBETA_ = _XBETA_ + 9.916621000665000E-01 * CarType_SPORT ; _XBETA_ = _XBETA_ + 4.644249491258800E-01 * CarType_TRUCK ; /* NOTE: CarType_SEDAN is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ - 1.151946594479500E-02 * AgeDriver ; MyPred_AmountLoss_GAMMA = 6.506745978302000E+03 * EXP(_XBETA_);
/**********************************************************************/ /* Distribution: GPD */ /**********************************************************************/ _XBETA_ = 0; _XBETA_ = _XBETA_ + 1.364260675458400E-02 * MileageDriven ; _XBETA_ = _XBETA_ - 4.739190610741700E-03 * IS ; /* NOTE: HomeOwner_NO is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ + 7.307694223592400E-01 * HomeOwner_YES ; /* NOTE: Gender_Female is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ + 1.496025653107000E+00 * Gender_Male ; _XBETA_ = _XBETA_ + 9.916644144925200E-01 * CarType_SPORT ; _XBETA_ = _XBETA_ + 4.644265557308700E-01 * CarType_TRUCK ; /* NOTE: CarType_SEDAN is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ - 1.151818427565500E-02 * AgeDriver ; MyPred_AmountLoss_GPD = 6.504569551883800E+03 * EXP(_XBETA_); /**********************************************************************/ /* Distribution: IGAUSS */ /**********************************************************************/ _XBETA_ = 0; _XBETA_ = _XBETA_ + 1.375427253970500E-02 * MileageDriven ; _XBETA_ = _XBETA_ - 4.808982977719000E-03 * IS ; /* NOTE: HomeOwner_NO is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ + 7.279886646359200E-01 * HomeOwner_YES ; /* NOTE: Gender_Female is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ + 1.499838197531700E+00 * Gender_Male ; _XBETA_ = _XBETA_ + 9.940256355577800E-01 * CarType_SPORT ; _XBETA_ = _XBETA_ + 4.644584176107000E-01 * CarType_TRUCK ; /* NOTE: CarType_SEDAN is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ - 1.161363856490700E-02 * AgeDriver ; MyPred_AmountLoss_IGAUSS = 6.790140708730100E+03 * EXP(_XBETA_); /**********************************************************************/ /* Distribution: LOGN */ /**********************************************************************/ _XBETA_ = 0; _XBETA_ = _XBETA_ + 1.379535910756300E-02 * MileageDriven ; _XBETA_ = _XBETA_ - 4.808040604328300E-03 * IS ; /* NOTE: HomeOwner_NO is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ + 7.286190149538200E-01 * HomeOwner_YES ; /* NOTE: Gender_Female is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ + 1.499292691976100E+00 * Gender_Male ; _XBETA_ = _XBETA_ + 9.935622786295200E-01 * CarType_SPORT ; _XBETA_ = _XBETA_ + 4.647870916071300E-01 * CarType_TRUCK ; /* NOTE: CarType_SEDAN is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ - 1.152580789026700E-02 * AgeDriver ; MyPred_AmountLoss_LOGN = 6.759869565247100E+03 * EXP(_XBETA_);
/**********************************************************************/ /* Distribution: PARETO */ /**********************************************************************/ _XBETA_ = 0; _XBETA_ = _XBETA_ + 1.365643731959700E-02 * MileageDriven ; _XBETA_ = _XBETA_ - 4.710463064928600E-03 * IS ; /* NOTE: HomeOwner_NO is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ + 7.307900535342100E-01 * HomeOwner_YES ; /* NOTE: Gender_Female is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ + 1.496043364894300E+00 * Gender_Male ; _XBETA_ = _XBETA_ + 9.918130012553400E-01 * CarType_SPORT ; _XBETA_ = _XBETA_ + 4.645298660617500E-01 * CarType_TRUCK ; /* NOTE: CarType_SEDAN is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ - 1.143601522019100E-02 * AgeDriver ; MyPred_AmountLoss_PARETO = 6.367949946138600E+03 * EXP(_XBETA_); /**********************************************************************/ /* Distribution: STWEEDIE */ /**********************************************************************/ _XBETA_ = 0; _XBETA_ = _XBETA_ + 1.346890420267100E-02 * MileageDriven ; _XBETA_ = _XBETA_ - 4.675720482528600E-03 * IS ; /* NOTE: HomeOwner_NO is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ + 7.318380293889600E-01 * HomeOwner_YES ; /* NOTE: Gender_Female is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ + 1.493775242549600E+00 * Gender_Male ; _XBETA_ = _XBETA_ + 9.908288084345400E-01 * CarType_SPORT ; _XBETA_ = _XBETA_ + 4.641286573822800E-01 * CarType_TRUCK ; /* NOTE: CarType_SEDAN is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ - 1.156384352057300E-02 * AgeDriver ; MyPred_AmountLoss_STWEEDIE = 6.293220261934300E+03 * EXP(_XBETA_); /**********************************************************************/ /* Distribution: WEIBULL */ /**********************************************************************/ _XBETA_ = 0; _XBETA_ = _XBETA_ + 1.282907588332400E-02 * MileageDriven ; _XBETA_ = _XBETA_ - 4.480114005729500E-03 * IS ; /* NOTE: HomeOwner_NO is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ + 7.297672767727700E-01 * HomeOwner_YES ; /* NOTE: Gender_Female is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ + 1.488831397013200E+00 * Gender_Male ; _XBETA_ = _XBETA_ + 9.931730126153400E-01 * CarType_SPORT ; _XBETA_ = _XBETA_ + 4.546576968650700E-01 * CarType_TRUCK ; /* NOTE: CarType_SEDAN is skipped because it is a redundant regressor. */ _XBETA_ = _XBETA_ - 1.211172101144000E-02 * AgeDriver ; MyPred_AmountLoss_WEIBULL = 5.778646806752700E+03 * EXP(_XBETA_); END;
ELSE DO; /**********************************************************************/ /* Set _WARN_ value */ /**********************************************************************/ SUBSTR(_WARN_,1,1) = 'M'; END; LABEL MyPred_AmountLoss_BURR = "Predicted mean for the Burr Distribution" ; LABEL MyPred_AmountLoss_EXP = "Predicted mean for the Exponential Distribution" ; LABEL MyPred_AmountLoss_GAMMA = "Predicted mean for the Gamma Distribution" ; LABEL MyPred_AmountLoss_GPD = "Predicted mean for the Generalized Pareto Distribution" ; LABEL MyPred_AmountLoss_IGAUSS = "Predicted mean for the Inverse Gaussian Distribution" ; LABEL MyPred_AmountLoss_LOGN = "Predicted mean for the Lognormal Distribution" ; LABEL MyPred_AmountLoss_PARETO = "Predicted mean for the Pareto Distribution" ; LABEL MyPred_AmountLoss_STWEEDIE = "Predicted mean for the Tweedie Distribution with Scale Parameter" ; LABEL MyPred_AmountLoss_WEIBULL = "Predicted mean for the Weibull Distribution" ; DROP _nInputMiss _XBETA_; /**********************************************************************/ /* End scoring code for SEVERITY */ /**********************************************************************/