## Find non missing value from set of treatments

Occasional Contributor
Posts: 6

# Find non missing value from set of treatments

Hi There,

I am having set of variables (trt01 - trt07) having character values , i need to find maximum non missing treatment from 7 treatments group.i need to use that last 2 digit number in a macro variable.

trt01   trt02   trt03   trt04

1          abc               def               ----------->   trt03

2          abc                                    ----------->   trt01

3         abc    def      ght    dsa      ------------>   trt04

Occasional Contributor
Posts: 6

## Find non missing value from set of treatments

[ Edited ]

Hi There,

I am having set of variables (trt01 - trt07) having character values , i need to find maximum non missing treatment from 7 treatments group.i need to use that last 2 digit number in a macro variable.

trt01   trt02   trt03   trt04

1          abc               def               ----------->   trt03

2          abc                                    ----------->   trt01

3         abc    def      ght    dsa      ------------>   trt04

instead of writing group of if then else statement any other dynamic way to find treatment ,any one help me please.

``````data d2;
set d1
array trt(7)  \$12.;
array trt_n(7);

do i = 1 to dim(trt);
trt_n(i)= ^missing(trt(i));
x = max(reverse(substr(cmtrt_atcn(i),1,2)));L_trt = trt||x;
end;
run;``````

Regular Contributor
Posts: 226

## Re: Find non missing value from set of treatments

[ Edited ]

vikram_e wrote:

Hi There,

I am having set of variables (trt01 - trt07) having character values , i need to find maximum non missing treatment from 7 treatments group.i need to use that last 2 digit number in a macro variable.

trt01   trt02   trt03   trt04

1          abc               def               ----------->   trt03

2          abc                                    ----------->   trt01

3         abc    def      ght    dsa      ------------>   trt04

Can you explain what should be stored in the macro-variable after all obs have been processed?

To find the last treatment use an array and a loop with decreasing index variable.Something like (untested code):

``````array t trt01-trt04;

do i = dim(t) to 1 by -1;
if not missing(t[i]) then do;
max = vname(t[i]);
leave;
end;
end;``````

Posts: 3,867

## Re: Find non missing value from set of treatments

``````data x;
infile cards missover;
input id (trt01-trt07) (\$);
cards;
1   abc   .  def
2   abc
3   abc    def      ght    dsa
;;;;
run;
data x2;
set x;
array _trt[*] trt07-trt01;
i  = whichC(coalesceC(of _trt[*]),of _trt[*]);
maxtrt = vname(_trt[i]);
drop i;
run;
proc print;
run;``````

Discussion stats
• 3 replies
• 180 views
• 2 likes
• 3 in conversation