🔒 This topic is solved and locked.
Need further help from the community? Please
sign in and ask a new question.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Posted 03-24-2022 07:47 PM
(673 views)
Hi,
I have a dataset, I want to select the IDs who have had treatment (0) vs those who have not(>0) and create. The summary should have only one ID per subject.
The below is my data.
ID treatment
1 0
1 1
1 1
2 1
2 3
2 3
3 0
3 0
3 0
How it should look like
ID Treatment(Dichotomous)
1 1
2 1
3 0
Thank you 🙂
1 ACCEPTED SOLUTION
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
next time, please post your data as datalines.
data have;
input ID treatment;
datalines;
1 0
1 1
1 1
2 1
2 3
2 3
3 0
3 0
3 0
;
proc print;
run;
data have2;
set have;
trt=treatment > 0;
run;
proc sort data=have2;
by id descending treatment;
run;
data want;
set have2;
by id descending treatment;
if first.id;
run;
3 REPLIES 3
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
next time, please post your data as datalines.
data have;
input ID treatment;
datalines;
1 0
1 1
1 1
2 1
2 3
2 3
3 0
3 0
3 0
;
proc print;
run;
data have2;
set have;
trt=treatment > 0;
run;
proc sort data=have2;
by id descending treatment;
run;
data want;
set have2;
by id descending treatment;
if first.id;
run;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
For each ID, read all the treatment>0 cases followed by all the without-treatment cases. Then just keep the first obs for each id and test its TREATMENT variable against 0.
data have;
input ID treatment;
datalines;
1 0
1 1
1 1
2 1
2 3
2 3
3 0
3 0
3 0
run;
data want (drop=treatment);
set have (where=(treatment>0)) have (where=(treatment=0));
by id;
if first.id;
trt_dummy=(treatment>0);
run;
This works if the data are already sorted by ID. But it doesn't matter what the order is within each ID.
--------------------------
The hash OUTPUT method will overwrite a SAS data set, but not append. That can be costly. Consider voting for Add a HASH object method which would append a hash object to an existing SAS data set
Would enabling PROC SORT to simultaneously output multiple datasets be useful? Then vote for
Allow PROC SORT to output multiple datasets
--------------------------
The hash OUTPUT method will overwrite a SAS data set, but not append. That can be costly. Consider voting for Add a HASH object method which would append a hash object to an existing SAS data set
Would enabling PROC SORT to simultaneously output multiple datasets be useful? Then vote for
Allow PROC SORT to output multiple datasets
--------------------------
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
data have;
input ID treatment;
cards;
1 0
1 1
1 1
2 1
2 3
2 3
3 0
3 0
3 0
;
proc sql;
create table want as
select id,sum(treatment>0) ne 0 as flag
from have
group by id;
quit;