0

I'm writing a code in proc iml and I want to run an if statement that evaluates each component of a vector and returns another vector but in one step. Is there any function to do so? Here's the code:

proc iml; 
use chap0; read all var{X} into X; 
            read all var{t} into t; 

count=0;/*init count number*/

W=1;

s= exp(X*w)/(1+ exp(X*w));
s1=j(5,1,10);


do step = 1 to 6; 
count=count+1;
s= exp(X*w)/(1+ exp(X*w));

if s <0.5 then s1= 0;  /**in this part I need to get a vector with 0 and 1**/
if s >0.5 then s1= 1;  /*I need to evaluate each component of the vector in this step*/
print s s1;

e = ssq(s - t); 

g=2*(s-t)*s`*(1-s);


h=2 * s * (1 - s)` * (s * (1 - s)` + (s - t) * (1 - 2 * s)`);

o=j(1,5,1);

gg=(o*g);
hh=((o*h)*o`);
gi=gg/hh;   
w1=w-gi;

s= exp(X*w)/(1+ exp(X*w)); 
if s <0.5 then s1= 0;  /**here again: 
in this part I need to get a vector with 0 and 1**/
if s >0.5 then s1= 1; 
print s1; 
e = ssq(s - t);
e1 = ssq(s1 - t);
w=w1;
print w w1 e e1 count;
end;

Thanks!

Joe
  • 62,789
  • 6
  • 49
  • 67
GabyLP
  • 3,649
  • 7
  • 45
  • 66
  • So you need a vector `s1` with same number of elements as `s` but 1/0 depending on if > or < 0.5? – Joe Jul 11 '14 at 20:49

1 Answers1

2

It's just as easy as it seems.

proc iml;
 s = 1:5;
 s1 = (s>3);  *this assigns 1 (true) or 0 (false), for each element, based on relation to 3.;
 print s1;
quit;
Joe
  • 62,789
  • 6
  • 49
  • 67