2014-07-11 41 views
0

我在proc iml中編寫代碼,我想運行一個if語句來評估向量的每個組件,並返回另一個向量,但只需一步。有沒有這樣做的功能?代碼如下:sas-比較不帶循環的向量的組件proc iml

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; 

謝謝!

+0

因此,您需要一個具有與's'相同數量元素的矢量's1',但是取決於if>或<0.5是否爲1/0? – Joe

回答

2

它看起來一樣簡單。

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;