BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
Dogo23
Quartz | Level 8

Hello,

 

Does anyone know why I am still getting multiple rows per date when I am grouping by the date? 

 

proc sql; 
create table t1 as
select 
distinct datepart(campaign_send_datetime) as send_date format = MMYYS.,
count(distinct email_campaign_id) as b
from dmprod.vw_email_campaign_history
group by 1
order by 1;
quit;
1 ACCEPTED SOLUTION

Accepted Solutions
Reeza
Super User

You could try something like the following, replacing datevar with your own data variable

 

group by put(datepart(datevar), yymms.)

View solution in original post

8 REPLIES 8
Dogo23
Quartz | Level 8

Here's the opuput:

 

Capture.PNG

Reeza
Super User

SQL doesn't group by formatted values, so it see's each date as a unique date.

So if you want monthly data you need to create a month variable to group by or use a SAS PROC.

Reeza
Super User

You could try something like the following, replacing datevar with your own data variable

 

group by put(datepart(datevar), yymms.)
Dogo23
Quartz | Level 8

Thanks Reeza, this was helpful!

Dogo23
Quartz | Level 8

Need some help!

 

I need to find out by month the average amount of communications a person is getting in a two year period? Any thoughts?

Thanks ahead of time!

 

proc sql; 
create table t1 as
select 
distinct datepart(campaign_send_datetime) as send_date format = MMYYS.,
count(id_number)/count(history_id) as average
from dm.vw_email_campaign_history
where datepart(campaign_send_datetime) between '01MAR2016'd and '01MAR2018'd
group by 1;
quit;

 

Patrick
Opal | Level 21

@Dogo23 wrote:

Need some help!

 

I need to find out by month the average amount of communications a person is getting in a two year period? Any thoughts?

Thanks ahead of time!

 

proc sql; 
create table t1 as
select 
distinct datepart(campaign_send_datetime) as send_date format = MMYYS.,
count(id_number)/count(history_id) as average
from dm.vw_email_campaign_history
where datepart(campaign_send_datetime) between '01MAR2016'd and '01MAR2018'd
group by 1;
quit;

 


Post sample data in the form of a SAS data step creating such data.

 

One of the things which certainly needs change is your group by statement. It should be something like:

group by person_id, intnx('dtmonth',campaign_send_datetime,0,'b')
Reeza
Super User

@Dogo23 I merged these two threads since they seem identical. Please don't post the same question multiple times. 

Dogo23
Quartz | Level 8

@Reeza The problems were related but I was looking for a unique answer to the group by problem with multiple datettime records.

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

Creating Custom Steps in SAS Studio

Check out this tutorial series to learn how to build your own steps in SAS Studio.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 8 replies
  • 5040 views
  • 0 likes
  • 3 in conversation