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

Hi SAS experts,

 

Currently, I have two datasets and I want to count the number of visits for each id. If the id in date1 appeared in date2 and the admdate in date2 is within 1 year prior to the admdate in date1, then the number of visit should increase by 1. Any suggestions on sql?

 

Thanks!

data date1;
	input admdate : mmddyy10. id @@;
	format admdate mmddyy10.;
	cards;
05/01/2009 1
08/01/2010 2
07/01/2011 3
08/24/2007 4
12/11/2012 5
;
run;

data date2;
	input admdate : mmddyy10. id @@;
	format admdate mmddyy10.;
	cards;
03/02/2007 1 04/25/2008 1 06/01/2008 1
05/15/2007 2 08/21/2009 2 10/22/2008 2
06/17/2006 3
09/10/2006 4 09/30/2006 4
;
run;
1 ACCEPTED SOLUTION

Accepted Solutions
noling
SAS Employee

Try this. I left it in 2 steps so you could see my thought process:

 

proc sql;
	create table temp as
	select date1.id, date1.admdate - date2.admdate as diff
	from date1, date2
	where date1.id=date2.id and date1.admdate - date2.admdate < 365
	group by date1.id;

	create table want as
	select id, count(id) as count
	from temp
	group by id;
quit;


Register today and join us virtually on June 16!
sasglobalforum.com | #SASGF

View now: on-demand content for SAS users

View solution in original post

2 REPLIES 2
noling
SAS Employee

Try this. I left it in 2 steps so you could see my thought process:

 

proc sql;
	create table temp as
	select date1.id, date1.admdate - date2.admdate as diff
	from date1, date2
	where date1.id=date2.id and date1.admdate - date2.admdate < 365
	group by date1.id;

	create table want as
	select id, count(id) as count
	from temp
	group by id;
quit;


Register today and join us virtually on June 16!
sasglobalforum.com | #SASGF

View now: on-demand content for SAS users

hashman
Ammonite | Level 13

@Xing :

I would suggest:

data date1 ;                                                          
  input id admdate :mmddyy10. ;                                       
  format admdate mmddyy10. ;                                          
  cards ;                                                             
1 05/01/2009                                                          
2 08/01/2010                                                          
3 07/01/2011                                                          
4 08/24/2007                                                          
5 12/11/2012                                                          
run ;                                                                 
data date2 ;                                                          
  input id admdate :mmddyy10. ;                                       
  format admdate mmddyy10. ;                                          
  cards ;                                                             
1 03/02/2007                                                          
1 04/25/2008                                                          
1 06/01/2008                                                          
2 05/15/2007                                                          
2 08/21/2009                                                          
2 10/22/2008                                                          
3 06/17/2006                                                          
4 09/10/2006                                                          
4 09/30/2006                                                          
run ;                                                                 
                                                                      
proc sql ;                                                            
  create table need as select date1.*, N_visits                       
  from   date1                                                        
  left join                                                           
  (select J.id, sum (ad2 <= intnx ("yr", ad1, -1, "s")) as N_visits   
   from   (select date2.id, date1.admdate as ad1, date2.admdate as ad2
           from   date1 inner join date2 on date1.id = date2.id) J    
   group id) N                                                        
  on date1.id = N.id                                                  
  ;                                                                   
quit ;                                                                

Kind regards

Paul D.

Ready to join fellow brilliant minds for the SAS Hackathon?

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!
How to Concatenate Values

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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 2 replies
  • 496 views
  • 0 likes
  • 3 in conversation