Using a SAS Data Set to Write SAS Code

advertisement
Using a SAS Data Set to Write SAS Code
By Bob Romero
• Request to see how many subscribers and non
subscribers in each city in the West Division
were being contacted through marketing
campaigns
• Hundreds of marketing campaigns are
generated by marketing analysts in the
western part of the United States
• Files containing customer and potential
customer information reside on server
Use FILENAME statement with ftp and ls options to
download contents into a SAS Data Set
•
libname perm '/export/home/mthompso/Counts/Comet/sasds';
•
•
•
•
•
filename dir ftp '' ls
Host=‘xxxxx'
User=‘xxxxxxxxxx'
Pass=‘xxxxxxx'
cd='DATA_OUT/DM';
Use data step with infile and input to create SAS data set(s)
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
data ns_datfiles s_datfiles;
infile dir dsd dlm = ' ';
input cometfile : $80. ;
if substr(cometfile,1,4) = '2011' then do;
month = input(substr(cometfile,6,2),2.);
if month = 02 then save = 1;
end;
if substr(cometfile,5,4) = '2011' then do;
month = input(substr(cometfile,10,2),2.);
if month = 02 then save = 1;
end;
if save then do;
if index(cometfile,'_NS') > 0 then output ns_datfiles;
else output s_datfiles;
end;
drop month save;
run;
Write SAS program to write SAS Code
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
data _null_;
file '/export/home/mthompso/COMET/Comet_counts_nonsub.sas';
set ns_datfiles end = last;
fix = trim(left(cometfile))||"'";
put "filename dat ftp '"fix;
put "Host=‘xxxxxx'";
put "User=‘xxxxxxxxxx'";
put "Pass=‘xxxxxxxx'";
put "cd='DATA_OUT/DM';";
put "data file"_n_" ;";
put "infile dat missover dsd dlm='|' firstobs=2;";
put "informat version_id $30.;";
put "input CampaignCode $ RunDate $ CellCode $ version_id $ listdetails $
SALUTATION_FULLNAME $ BILLING_ADDRESS_1 $ BILLING_ADDRESS_2 $
BILLING_CITY $ BILLING_STATE $ BILLING_ZIP $ BILLING_ZIP4 $
BILLING_DPBC $ BILLING_LOT $ BILLING_CRRT $ CORP_SYSPRIN $
BILLING_HOUSE_KEY $ BILLING_ACCT_KEY $ CSG_SPA $ CSG_SPA2 $
DIVISION_NAME $ REGION_NAME $ AUDIENCE_ID $ CMCST_MICRO_SEG $
CMCST_SUPER_SEG $ CSG_NODE $;";
put "run;";
Write proc summary code
•
•
•
•
put
put
put
put
"proc summary data = file"_n_" nway ;";
"class corp_sysprin version_id;";
"output out = sum_file"_n_";";
"run;";
Concatenate Summarized Files
•
•
•
•
•
•
•
•
put "data sum_file"_n_";";
put "set sum_file"_n_";";
put "cometfile = '"cometfile "';";
put "run;";
put "data perm.Comet_counts_Nonsubs;";
put "format cometfile $80. version_id $30.;";
if _n_ = 1 then put "set sum_file"_n_";";
else put "set perm.Comet_counts_nonsubs
sum_file"_n_";";
• if last then put "drop _type_;";
• put "run;";
• run;
Same process for Subscriber Files
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
data _null_;
file '/export/home/mthompso/COMET/Comet_counts_sub.sas';
set s_datfiles end = last;
fix = trim(left(cometfile))||"'";
put "filename dat ftp '"fix;
put "Host='nepal'";
put "User='mktwestdiv'";
put "Pass='w3$td1v'";
put "cd='DATA_OUT/DM';";
put "data file"_n_" ;";
put "infile dat missover dsd dlm='|' firstobs=2;";
put "informat version_id $30.;";
put "input CampaignCode $ RunDate $ CellCode $ version_id $ listdetails $
SALUTATION_FULLNAME $ BILLING_ADDRESS_1 $ BILLING_ADDRESS_2 $
BILLING_CITY $ BILLING_STATE $ BILLING_ZIP $ BILLING_ZIP4 $
BILLING_DPBC $ BILLING_LOT $ BILLING_CRRT $ CORP_SYSPRIN $
BILLING_HOUSE_KEY $ BILLING_ACCT_KEY $ CSG_SPA $ CSG_SPA2 $
DIVISION_NAME $ REGION_NAME $ AUDIENCE_ID $ CMCST_MICRO_SEG $
CMCST_SUPER_SEG $ CSG_NODE $;";
put "run;";
put "proc summary data = file"_n_" nway ;";
put "class corp_sysprin version_id;";
put "output out = sum_file"_n_";";
put "run;";
put "data sum_file"_n_";";
put "set sum_file"_n_";";
put "cometfile = '"cometfile "';";
put "run;";
put "data perm.Comet_counts_subs;";
put "format cometfile $80. version_id $30.;";
if _n_ = 1 then put "set sum_file"_n_";";
else put "set perm.Comet_counts_subs sum_file"_n_";";
if last then put "drop _type_;";
put "run;";
run;
Include code to run newly generated code
•
•
%include '/export/home/mthompso/COMET/Comet_counts_nonsub.sas';
%include '/export/home/mthompso/COMET/Comet_counts_sub.sas';
• First program is 2,876 lines
• Second program is 6,947 lines
Conclusion
Summarized Data is exported to EXCEL showing
exactly how customers have been contacted in
each locale
Keys to success:
• ls option on filename with ftp
• Files have naming convention
• Every dat file has same format
Download