BookmarkSubscribeRSS Feed
ej_jung
Calcite | Level 5

I wanna thank you guys cause i've got so many informations here.

Followings are briefs of my data sheet,

 

stnd_y person_id recu_day date sick_sym 

2002 100 20020929 02-09-29 A 
2002 100 20020929 02-09-29 B 
2002 100 20020929 02-09-29 D 
2002 100 20020930 02-09-30 B 
2002 100 20020930 02-09-30 E 
2002 100 20021002 02-10-02 X 
2002 100 20021002 02-10-02 W 
2002 101 20020927 02-09-27 S 
2002 101 20020927 02-09-27 O 
2002 101 20020928 02-09-28 C 
2002 102 20021001 02-10-01 F 
2002 103 20021003 02-10-03 G 
2002 104 20021108 02-11-08 H 
2002 104 20021108 02-11-08 A 
2002 104 20021112 02-11-12 B 

 

And, I want to make above things as followings,

 

stnd_y person_id recu_day date sick_sym Admission

2002 100 20020929 02-09-29 A 1
2002 100 20020929 02-09-29 B 1
2002 100 20020929 02-09-29 D 1
2002 100 20020930 02-09-30 B 2
2002 100 20020930 02-09-30 E 2
2002 100 20021002 02-10-02 X 3
2002 100 20021002 02-10-02 W 3
2002 101 20020927 02-09-27 S 1
2002 101 20020927 02-09-27 O 1
2002 101 20020928 02-09-28 C 2
2002 102 20021001 02-10-01 F 1
2002 103 20021003 02-10-03 G 1
2002 104 20021108 02-11-08 H 1
2002 104 20021108 02-11-08 A 1
2002 104 20021112 02-11-12 B 2

 

I mean, i want to make a variable of admission frequency personally with recu_day and date(this variables mean the date of hospitalization, and each person has several symptoms on every day, so recu_day and date are repeated.)

 

And then, I used followings with sas,

proc sort data=old out=new;
by person_id recu_day;
data new1;
set new;
retain admission 0;
by person_id recu_day;
if recu_day^=lag(recu_day) and(or) person_id^=lag(person_id) then
admission+1;
run;

 

And also,

data new1;
set new ;
by person_id recu_day;
retain adm 0;
if first.person_id and(or) first.recu_day then admission=admission+1;
run;


But, those are not working.
How can i solve this? Please let me know about this.

Thank you in advance!

 

 

Obiter dictum,


proc sort data=a out=a1;
by person_id recu_fr_dt;
data a3;
set a1 ;
by person_id recu_fr_dt;
if first.person_id then adm+1;
run;

 

According to above codes, the results is following, as i don't mean it.

stnd_y person_id recu_day date sick_sym Admission

2002 100 20020929 02-09-29 A 1
2002 100 20020929 02-09-29 B 2
2002 100 20020929 02-09-29 D 3
2002 100 20020930 02-09-30 B 4
2002 100 20020930 02-09-30 E 5
2002 100 20021002 02-10-02 X 6
2002 100 20021002 02-10-02 W 7
2002 101 20020927 02-09-27 S 1
2002 101 20020927 02-09-27 O 2
2002 101 20020928 02-09-28 C 3
2002 102 20021001 02-10-01 F 1
2002 103 20021003 02-10-03 G 1
2002 104 20021108 02-11-08 H 1
2002 104 20021108 02-11-08 A 2
2002 104 20021112 02-11-12 B 3

 

How could i fix it?

Thank you! 😄

1 REPLY 1
Astounding
PROC Star

There are some tools worth learning ... they will be invaluable in your future programming.  After sorting:

 

data want;

set have;

by person_id recu_day;

if first.person_id then admission=1;

else if first.recu_day then admission + 1;

run;

 

The BY statement in the DATA step creates temporary variables FIRST. and LAST. for each variable that is in the BY statement.  You'll need to both study and practice with them.

SAS Innovate 2025: Call for Content

Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!

Submit your idea!

Discussion stats
  • 1 reply
  • 896 views
  • 2 likes
  • 2 in conversation