2016-04-13 11 views
1

SASに指定した条件で2列を追加するにはどうすればよいですか?指定した条件の2列をSASに追加する方法は?

ここでは、最初の2列に指定された列データを追加します。

data data1; 
     set data; 
     column1 = x; 
     column2 = y; 
     total = column1 + column2; 
    run; 

    input 
    x y a b c d e 
    -- -- -- -- -- -- -- 
    a c 1 45 32 7 45 
    b a 22 45 55 33 55 
    d e 56 78 66 44 12 
    c d 33 45 44 56 77 

    Output 
    x y a b c d e Output 
    -- -- -- -- -- -- -- ------ 
    a c 1 45 32 7 45 33 
    b a 22 45 55 33 55 67 
    d e 56 78 66 44 12 56 
    c d 33 45 44 56 77 100 

答えて

-1

私はこれを行うためのクリーンな方法があります確信しているが、これは動作します:ここで

data data; 
    input 
    x $ y $ a b c d e; 
    datalines; 
    a c 1 45 32 7 45 
    b a 22 45 55 33 55 
    d e 56 78 66 44 12 
    c d 33 45 44 56 77 
    ; 
run; 

data data1; 
    set data; 
    count = _n_; 
run; 

proc sql noprint; 
    select count into: countlist 
    separated by " " from data1; 
quit; 

proc sql noprint; 
    select x into: xlist 
    separated by " " from data1; 
quit; 

proc sql noprint; 
    select y into: ylist 
    separated by " " from data1; 
quit; 

%macro add; 

    data data2 (drop = count); 
     set data1; 
     %do i = 1 %to %sysfunc(countw(&countlist.)); 
     %let this_x = %scan(&xlist., &i.); 
     %let this_y = %scan(&ylist., &i.); 
      if &i. = count then total = &this_x. + &this_y.; 
     %end; 
    run; 

%mend add; 

%add; 
1

はシンプルなソリューションです。追加する可能な数値の配列を作成し、それらをループして、関数を使用して変数名がxまたはyの値と同じであるかどうかを確認します。

data have; 
input x $ y $ a b c d e; 
datalines; 
a c 1 45 32 7 45 
b a 22 45 55 33 55 
d e 56 78 66 44 12 
c d 33 45 44 56 77 
; 
run; 

data want; 
set have; 
array vars{*} a--e; 
output=0; 
do i = 1 to dim(vars); 
    if x=vname(vars{i}) then output+vars{i}; 
    if y=vname(vars{i}) then output+vars{i}; 
end; 
drop i; 
run; 
+0

@Joe私は私がフォローしているかわかりません。 'output'はすべての行の先頭で0にリセットされます。 – Longfish

+0

ああ、コードで設定してくださいね。 – Joe

関連する問題