Wednesday, November 4, 2015

AnalysisMatrixPattern5

data work.shippingMatrix;
length freight address tax money dates country $64;
freight = '(a,1,a)';
address = '(b,2,b)';
tax = '(c,3,c)';
money = '(d,4,d)';
dates = '(e,5,e)';
country = 'United States of America';
output;
country = 'Canada';
output;
country = 'Germany';
output;
run;

%macro processingMacro(freight,address,tax,money,dates,country);
%put Processing Macro &freight. &address. &tax. &money. &dates. &country.;
%mend processingMacro;

%macro analysisMatrix(dataset);
%local systemError datasetID returnCode totalObs;
%local matrixFreight matrixAddress matrixTax matrixMoney matrixDates matrixCountry;
%let systemError = 0;
%let datasetID = 0;

%if %sysfunc(exist(&dataset,DATA)) %then
%do;
* Open the dataset by obtaining a numeric datasetID;
%let datasetID = %sysfunc(open(&dataset,i));

%if &datasetID. > 0 %then
%put Dataset Successfully Opened: &datasetID.;
%else
%do;
%put ERROR IN OPENING DATASET &dataset. ?DatasetID = &datasetID.;
%let systemError = 1;
%end;
%end;
%else
%do;
%put Dataset &dataset. does not exist;
%let systemError = 1;
%end;

%if not(&systemError.) %then
%do;
* Obtain the number of dataset observations (rows);
%let totalObs = %sysfunc(ATTRN(&datasetID.,NLOBS));

%if &totalObs. > 0 %then
%put Total Dataset Observations: &totalObs.;
%else
%do;
%put ERROR INSUFFICIENT OBSERVATIONS IN &dataset. -- DatasetID = &datasetID.;
%let systemError = 1;
%end;
%end;

%if not(&systemError.) %then
%do;
%do counter = 1 %to &totalObs.;
%let returnCode = %sysfunc(fetchobs(&datasetID.,&counter.));

%if &returnCode. = 0 %then
%do;
%let matrixFreight = %sysfunc(getvarc(&datasetID.,%sysfunc(varnum(&datasetID.,freight))));
%let matrixAddress = %sysfunc(getvarc(&datasetID.,%sysfunc(varnum(&datasetID.,address))));
%let matrixTax = %sysfunc(getvarc(&datasetID.,%sysfunc(varnum(&datasetID.,tax))));
%let matrixMoney = %sysfunc(getvarc(&datasetID.,%sysfunc(varnum(&datasetID.,money))));
%let matrixDates = %sysfunc(getvarc(&datasetID.,%sysfunc(varnum(&datasetID.,dates))));
%let matrixCountry = %sysfunc(getvarc(&datasetID.,%sysfunc(varnum(&datasetID.,country))));

* After the matrix variables have been populated, then call the processing macro;
%processingMacro(freight=&matrixFreight.,address=&matrixAddress.,tax=&matrixTax.,
money=&matrixMoney.,dates=&matrixDates.,country=&matrixCountry.);
%end;
%end;
%end;

%if &datasetID. > 0 %then
%do;
* Close the dataset;
%let returnCode = %sysfunc(close(&datasetID.));

%if &returnCode. = 0 %then
%do;
%let datasetID = 0;
%put Dataset Successfully Closed;
%end;
%else
%do;
%put ERROR IN CLOSING DATASET &datasetID.;
%let systemError = 1;
%end;
%end;
%mend analysisMatrix;

%analysisMatrix(dataset=work.shippingMatrix);

proc setinit;
quit;

/*
open(dataset,'constant')
%sysfunc(open(&dataset.,constant))
*/

No comments:

Post a Comment