BookmarkSubscribeRSS Feed
mar0000
Obsidian | Level 7
data want;
set have; 
by ID Date Sport; 
keep ID Type Sport Date EventID Defn; 
day = ifc(FIRST.Date, 'Y', 'N'); 
person = ifc(ID, 'Y', 'N'); 
spo = ifc(FIRST.Sport, 'Y', 'N'); 
if Type in (1,2) then do;
dd = intck('MONTH', lag(Date), Date,'C');
if dd=> 6 of FIRST.ID then Defn = 'Y';
else Defn = 'N'
end;
else if Type in (3,4) then do;
if person='Y' and day='Y' and spo='Y' then Defn='Y'
else Defn = 'N';
end;
run;

 

 

data have; 
ID Type Sport Date EventID; 
12 1 Baseball 06JUN2018 8779 
12 1 Baseball 20JUN2019 8452 
29 4 Skiing 12JAN2018 5683 
29 4 Snowboard 12JAN2018 5683 
08 3 Basketball 20MAR2019 1689 
58 2 Tennis 30AUG2017 2157

 

The data above is an example of my data. 

This code is almost working how I want it to, but not yet. INTCK is semi-working, and I'm not sure how to completely get it to work (it will say 'Y' for NOV 2011 and 'Y' for JULY 2013, but 'N' for JUNE 2012. Is there a way to fix this? I also want this to return 'Y' for types 3 and 4 if they're 1 day between each other (January 1st and 2nd) and it isn't doing this. How would I fix these?

1 REPLY 1
ChrisNZ
Tourmaline | Level 20

You cannot use the lag() function inside a test.

lag() needs to update its stack by being called.

If it's called after a IF test, it's not always called and value fall out of sync,

 

Use something like

PREV_DATE= lag(Date);
if TYPE in (1,2) then do;
  DD = intck('month', PREV_DATE, DATE, 'C');

 

hackathon24-white-horiz.png

The 2025 SAS Hackathon has begun!

It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.

Latest Updates

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.

SAS Training: Just a Click Away

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

Browse our catalog!

Discussion stats
  • 1 reply
  • 632 views
  • 0 likes
  • 2 in conversation