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

I have long data and wrote code to track changes in 2 variables over time. However, the second entry for each userID is wrong. My data, code, and screenshot of results below. What is wrong with the code?

 

data fake_data;
input userID $ event_date date9. response $ code $;
format event_date date9.;
datalines;
1693 01Dec2014 Y V
1693 01Jan2015 Y V
1693 01Feb2015 Y V
1693 01Mar2015 M G
1693 01Apr2015 M G
1693 01May2015 M G
1129 01Feb2018 Y V
1129 01Mar2018 Y V
1129 01Apr2018 N R
1129 01May2018 N R
1129 01Jun2018 M R
1129 01Jul2018 M R 
1345 01Aug2016 N R
1345 01Sep2016 N R
1345 01Oct2016 N R
1345 01Nov2016 N R
1345 01Dec2016 M R
1345 01Jan2017 M G
1345 01Feb2017 Y G
1345 01Mar2017 Y G
1345 01Apr2017 Y G
1345 01May2017 Y G
;

proc sort data = fake_data out=fake_data_nodupkey nodupkey; by userID event_date; run;
data flag_vars;
set fake_data_nodupkey;
by userID event_date;
if first.userID then do;
	prev_response = response;
	prev_code = code;
	end;
else do;
	prev_response = lag(response);
	prev_code = lag(code);
	end;

response_change = 0;
if response ne prev_response then response_change = 1;

code_change = 0;
if code ne prev_code then code_change = 1;

run;

proc print data=flag_vars;
run;

results.PNG

1 ACCEPTED SOLUTION

Accepted Solutions
axescot78
Quartz | Level 8
data flag_vars;
set fake_data_nodupkey;
by userID ;

prev_response = lag(response);
prev_code = lag(code);

if first.userID then do;
	prev_response = response;
	prev_code = code;
	end;

response_change = 0;
if response ne prev_response then response_change = 1;

code_change = 0;
if code ne prev_code then code_change = 1;

 
run;

View solution in original post

1 REPLY 1
axescot78
Quartz | Level 8
data flag_vars;
set fake_data_nodupkey;
by userID ;

prev_response = lag(response);
prev_code = lag(code);

if first.userID then do;
	prev_response = response;
	prev_code = code;
	end;

response_change = 0;
if response ne prev_response then response_change = 1;

code_change = 0;
if code ne prev_code then code_change = 1;

 
run;

sas-innovate-white.png

Our biggest data and AI event of the year.

Don’t miss the livestream kicking off May 7. It’s free. It’s easy. And it’s the best seat in the house.

Join us virtually with our complimentary SAS Innovate Digital Pass. Watch live or on-demand in multiple languages, with translations available to help you get the most out of every session.

 

Register now!

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
  • 530 views
  • 0 likes
  • 1 in conversation