I am trying to group my data into the following data ranges, it's not working and I am still learning my way around SAS. Any thoughts?
data=contact_date_interval;
set work.contact_ind;
format EFFECTIVE_FROM date9.;
date=datepart(EFFECTIVE_FROM);
if date >= '01NOV2018'd and date <= '28Feb2019'D then
Group ="1Nov2018 - 28Feb2019";
else if date >='01MAR2019'D and date <='06MAY2019'D then
Group = "1March - 6May2019";
else if date >='07MAY2019'D and date <='31MAY2019'D then
Group = "7May - 31May2019";
else if date >='01JUN2019'D and date <='31JUL2019'D then
Group = "1Jun - 31Jul2019";
else Group ='Other';
run;
I would also like to view the results as a count.
1. Remove the = sign on the first line
2. The code seems fine. What error do you get?
3. This is easier to read:
data CONTACT_DATE_INTERVAL;
set WORK.CONTACT_IND;
format EFFECTIVE_FROM date9.;
DATE=datepart(EFFECTIVE_FROM);
if '01NOV2018'd <= DATE <= '28FEB2019'd then GROUP = "1Nov2018 - 28Feb2019";
else if '01MAR2019'd <= DATE <= '06MAY2019'd then GROUP = "1March - 6May2019";
else if '07MAY2019'd <= DATE <= '31MAY2019'd then GROUP = "7May - 31May2019";
else if '01JUN2019'd <= DATE <= '31JUL2019'd then GROUP = "1Jun - 31Jul2019";
else GROUP = 'Other';
run;
1. Remove the = sign on the first line
2. The code seems fine. What error do you get?
3. This is easier to read:
data CONTACT_DATE_INTERVAL;
set WORK.CONTACT_IND;
format EFFECTIVE_FROM date9.;
DATE=datepart(EFFECTIVE_FROM);
if '01NOV2018'd <= DATE <= '28FEB2019'd then GROUP = "1Nov2018 - 28Feb2019";
else if '01MAR2019'd <= DATE <= '06MAY2019'd then GROUP = "1March - 6May2019";
else if '07MAY2019'd <= DATE <= '31MAY2019'd then GROUP = "7May - 31May2019";
else if '01JUN2019'd <= DATE <= '31JUL2019'd then GROUP = "1Jun - 31Jul2019";
else GROUP = 'Other';
run;
It ran when I used yours, I am assuming it was the = in the beginning or the order. If I wanted to have a table of the counts in those date ranges what would the code for that look like?
Look at proc freq.
You may want to consider a custom format such as:
proc format library=work; value dategroup '01NOV2018'd - '28FEB2019'd = "1Nov2018 - 28Feb2019" '01MAR2019'd - '06MAY2019'd = "1March - 6May2019" '07MAY2019'd - '31MAY2019'd = "7May - 31May2019" '01JUN2019'd - '31JUL2019'd = "1Jun - 31Jul2019" other= 'Other'; run; proc freq data=work.contact_date_interval; tables date; format date dategroup.; run;
Without explicitly creating a group variable and using the format associated with the date if you have to add another interval late such as 1Aug2019- 4Sep2019. Then by changing the format the group will change with the format.
Categories created with formats will be used by most analysis, reporting and graphing procedures.
And actually a format could be made using your raw datetime values as well..
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.