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

Hi all, 

I'm interested in BR-based regimens in the following code. I wish to keep all patient ids.

I'm not sure how to proceed

IDREGIMENLOTregimen12
1A1LChemo monotherapy
1 2L 
1 3L 
2B1LChemo monotherapy
2 2L 
2 3L 
3C+D1LBR-based
3 2L 
3 3L 
4C+D1LBR-based
4 2L 
4 3L 
5E1LChemo monotherapy
5F2LChemo monotherapy
5E+F3LOther chemotherapy
5G1Lonco
5 2L 
5 3L 
6C+D1LBR-based
6 2L 
6 3L 

 

Data want - 

IDREGIMENLOTregimen12
3C+D1LBR-based
3 2L 
3 3L 
4C+D1LBR-based
4 2L 
4 3L 
6C+D1LBR-based
6 2L 
6 3L 
1 ACCEPTED SOLUTION

Accepted Solutions
Ksharp
Super User
CODE NOT TESTED:

proc sql;
create table want as
select * from have
where ID in (select ID from have where regimen12='BR-based')
;
quit;

View solution in original post

4 REPLIES 4
Ksharp
Super User
CODE NOT TESTED:

proc sql;
create table want as
select * from have
where ID in (select ID from have where regimen12='BR-based')
;
quit;
SSK_011523
Calcite | Level 5

Thank you! this code works. 

I QC'ed it too. 

yabwon
Onyx | Level 15

Two more options along with the one proposed by @Ksharp 

data have;
infile cards dlm="|";
input ID REGIMEN :$3. LOT $2. regimen12 :$30.;
cards;
1|A|1L|Chemo monotherapy
1| |2L| 
1| |3L| 
2|B|1L|Chemo monotherapy
2| |2L| 
2| |3L| 
3|C+D|1L|BR-based
3| |2L| 
3| |3L| 
4|C+D|1L|BR-based
4| |2L| 
4| |3L| 
5|E|1L|Chemo monotherapy
5|F|2L|Chemo monotherapy
5|E+F|3L|Other chemotherapy
5|G|1L|onco
5| |2L| 
5| |3L| 
6|C+D|1L|BR-based
6| |2L| 
6| |3L| 
;
run;
proc print;
run;

/* option 1 */
data want;
  do _N_=1 by 1 until(last.ID);
    set have;
    by ID notsorted;
    output+(regimen12="BR-based");
  end;

  do _N_=1 to _N_;
    set have;
    if output then output;
  end;
  output=0;
  drop output;
run;
proc print;
run;

/* option 2 */
data want2;
  declare hash H(dataset:"have(where=(regimen12='BR-based'))");
  H.defineKey("ID");
  H.defineDone();

  do until(eof);
    set have end=eof;
    if 0=H.check() then output;
  end;
stop;
run;
proc print;
run;

 

Bart

_______________
Polish SAS Users Group: www.polsug.com and communities.sas.com/polsug

"SAS Packages: the way to share" at SGF2020 Proceedings (the latest version), GitHub Repository, and YouTube Video.
Hands-on-Workshop: "Share your code with SAS Packages"
"My First SAS Package: A How-To" at SGF2021 Proceedings

SAS Ballot Ideas: one: SPF in SAS, two, and three
SAS Documentation



yabwon
Onyx | Level 15

and since IDs are numerical in "limited" range, one more:

/* option 3 */
data want3;
  
  array IDs[1:100] _temporary_;
  do until(eof1);
    set have(keep=ID regimen12) end=eof1;
    where regimen12='BR-based';
    IDs[ID]=1;
  end;

  do until(eof2);
    set have end=eof2;
    if IDs[ID] then output;
  end;
stop;
run;
proc print;
run;
_______________
Polish SAS Users Group: www.polsug.com and communities.sas.com/polsug

"SAS Packages: the way to share" at SGF2020 Proceedings (the latest version), GitHub Repository, and YouTube Video.
Hands-on-Workshop: "Share your code with SAS Packages"
"My First SAS Package: A How-To" at SGF2021 Proceedings

SAS Ballot Ideas: one: SPF in SAS, two, and three
SAS Documentation



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!

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
  • 4 replies
  • 528 views
  • 0 likes
  • 3 in conversation