0

SASデータステップコードのこのブロックでは、TEST_TableというSQLクエリからテーブルを設定しています。このテーブルには、PREFIX_1からPREFIX_20というタイトルの列のより大きなセクションを含む複数の列が含まれています。各列はPREFIX_で始まり、1から20まで増加します。

私がやりたいのは、各列を繰り返し循環し、その列の値を分析することです。

以下は私が行おうとしていることの例です。ご覧のとおり、反復ごとに増加する変数を作成し、そのカウント値をチェックしている変数名の一部として使用します。

data TEST_Data;
  set TEST_Table;
  retain changing_number;
  
  changing_number=1;
  do while(changing_number<=20);    
    if PREFIX_changing_number='BAD_IDENTIFIER' then do;
      PREFIX_changing_number='This is a bad part';
    end;
  end;  

run;

SASでこれを行うための最良の方法はどのようになりますか?1から20までの各値を個別にチェックするだけでそれができることを私は知っています。

if PREFIX_1 = 'BAD_IDENTIFIER' then do;
  PREFIX_1 = 'This is a bad part';
end;
if PREFIX_2 = ...

しかし、後で40を超える列のセットで同じことを行うので、それは本当に不快です。

アイデア?

解決

data TEST_Data;
    set TEST_Table;
    
    array SC $ SC1-SC20;
    
    do i=1 to dim(SC);    
      if SC{i}='xxx' then do;
         SC{i}="bad part";
      end;   
    end;  
run;

配列を提案していただきありがとうございます:)

4

1 に答える 1

1

SASで配列処理を検索する必要があります。簡単に言えば、次のようなことができます。

data TEST_Data;
  set TEST_Table;
  *retain changing_number; Remove this - even in your code it does nothing useful;
  array prefixes prefix:; *one of a number of ways to do this;
  changing_number=1;
  do while(changing_number<=20);    
    if prefixes[changing_number]='BAD_IDENTIFIER' then do;
       prefixes[changing_number]='This is a bad part';
    end;
  end;  

run;

少し良いループは次のとおりです。

do changing_number = 1 to dim(prefixes);
... loop ...
end;

これはすべて1つのステップで行われ、配列要素の数に柔軟に対応できます(dim =配列内の要素の数)。

于 2012-11-15T21:36:05.573 に答える