DATA Step, Macro, Functions and more

Find non missing value from set of treatments

Reply
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

 

 

any one help me please.

 

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: 195

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

 

 

any one help me please.

 


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;

 

 

Respected Advisor
Posts: 3,832

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;

2017-10-17_8-14-25.png

Ask a Question
Discussion stats
  • 3 replies
  • 159 views
  • 2 likes
  • 3 in conversation