2016-04-13 8 views
0

私の目的は、フォローアップがあるかどうかを調べることです。まず、objidはすべてR1R14と比較する必要があります。 objidがRXに等しい場合は、R(X+1)にフォローアップがあるかどうかチェックしてください。合計で最大Rは14です。objid=R14の場合、フォローアップはありません。たとえば、最初のレコードのobjidは1111です。これはR1と同じであり、R2がないため、R2というフォローアップがあります。 2番目のレコードR1=R14ですが、フォローアップはありません。マクロ出力なしでループする

私はコードを書きましたが、出力はありません。問題がどこにあるのか分かりません。

objid R1 R2 ... R14 
----- ---- ----  ---- 
1111 1111 1112 ... 
2222 1101 2201 ... 2222 
...    
4567 5234 4567 ... 

コード:

%macro rr(n=); 
    data linkrr; 
     set linkrev_tricup; 
     %do i=1 %to &n; 
     %if %eval(r&i.=objid) %then %do; 
      %let j=%eval(&i.+1); 
      %if %eval(r&j.>0) %then %eval(index_rr=1); 
      %else %eval(index_rr=0); 
      output; 
     %end; 
     %end; 
    run; 
%mend rr; 
%rr(n=14); 

答えて

0

あなたはマクロとdatastep機能を混合している

データは次のようになります。マクロ関数は単なるコードジェネレータです。データストアで渡される情報は評価できません。 配列番号が のデータストアコードのみを使用してみてください。

data linkrev_tricup; 
    infile datalines ; 
    input objid R1 R2 R14; 
    datalines;      
1111 1111 1112 . 
2222 1101 2201 2222 
; 

data linkrr; 
set linkrev_tricup; 
index_rr=0; 
array R [*] R1 -- R14; 
do i = 1 to dim(R)-1; 
    if R[i] eq objid and R[i+1] gt 0 then do; 
     index_rr=1; 
     leave; 
    end; 
end; 
if R[dim(R)] eq objid then index_rr=1; 
run; 
+0

私はOPを読んで、彼女は2番目のレコードでindex_rr = 0としたいと思っていますので、最後にIF文を削除します。 – Quentin

+0

私はその質問のその部分を本当に理解していませんでした。その場合、 'if R [dim(R)] eq objid then index_rr = 1;'部分を除いてください。 – Jetzler

関連する問題