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

Hi Experts,

 

Appreciate your input.

 

I have data like below.
It has ID and their PDL1 values.

 

Data have;
Input ID $8. PDL1 $8.;
cards;
E0401004 0
E0401004 <1
E0402001 <1
E0402001 80
E0403018 70
E0403018 80
E0403018 95
E0403503 N/A
E0403503 0
E1005513 12
E1005513 5
;
Run;

We need to add priority variable as follows.


if PDL1 = "N/A" then priority=0;
if PDL1 in ('0', '<1') then priority=1;
if 1<=PDL1<=49 then priority=2;
if 50<=PDL1 then priority=3;

 

If a patient has more than one result, the highest result needs to be selected.

 

I want

ID Expected PDL1 Priority
E0401004 0 1
E0402001 80 3
E0403018 95 3
E0403503 0 1
E1005513 12 2
1 ACCEPTED SOLUTION

Accepted Solutions
LinusH
Tourmaline | Level 20

Once your prio logic is in place, you can use SQL, something like:

 

proc sql;
   select id, pdl1, priority
      from have
      group by id
      having max(priority) = priority
;
quit;
Data never sleeps

View solution in original post

3 REPLIES 3
LinusH
Tourmaline | Level 20

Once your prio logic is in place, you can use SQL, something like:

 

proc sql;
   select id, pdl1, priority
      from have
      group by id
      having max(priority) = priority
;
quit;
Data never sleeps
andreas_lds
Jade | Level 19

Easy to solve after PDL1 has been converted to a numeric variable. 

proc format;
    invalue pdl2num
        "N/A" = .
        "<1" = 0
        other = [best.]
    ;
    value pdlprio
        . = 0
        0 = 1
        1 - 49 = 3
        50 - HIGH = 4
    ;
run;

data fixed;
    set have(rename= (pdl1 = pdl1_str));

    pdl1 = input(pdl1_str, pdl2num.);
    priority = put(pdl1, pdlprio.);
run;

Use the code posted by @LinusH to get the final result.

anandrc
Obsidian | Level 7


Thanks for the reply.

Expected PDL1 variable result - only when there is more than one value of any combination (<1, 0)  the results should display <1 and not 0.
Ideally per logic, its 0 because that higher than <1 but our report need to show as <1.

Sorry for the confusion.
So want the final dataset to show

ID Expected PDL1
E0401004 <1
E0402001 80
E0403018 95
E0403503 0
E1005513 12

sas-innovate-2026-white.png



April 27 – 30 | Gaylord Texan | Grapevine, Texas

Registration is open

Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!

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
  • 3 replies
  • 245 views
  • 1 like
  • 3 in conversation