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..
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
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.