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..
Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.
Register today!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.
Select SAS Training centers are offering in-person courses. View upcoming courses for: