別のデータステップ内にデータステップステートメントを発行しているので、コードはそのようには機能しません。そのようなことをするには、物事を別に設定する必要があります。それを行う方法は次のとおりです。
まず我々は値column1
、column2
とcolumn5
を挿入しますする列(あなたT.BetterSet
表を装っ)と呼ばれるデータセットを生成しましょう - つまり、列は、我々は同じのテーブルに複製見たいです後で名前。
data columns;
informat column $32.;
input column;
datalines;
column1
column2
column5
;
その後、我々は列column5
からcolumn1
を含む(あなたEnd.DatasetpreparedForAnalisys
表を装っ)のサンプルデータを生成します。 columns
テーブルの内容が指定されている場合、列1,2および5のみが後でスタンドアロンテーブルになります。
data sampleData;
informat column1-column5 8.;
input column1-column5;
datalines;
12 -1 2 3 0
-2 -3 -1 0 -3
0 -4 -5 -2 -9
-1 -5 4 2 0
;
は、今、私たちは、個々の列の出力データセットを作成するために必要なすべての文を発行しますマクロ
%createTable
宣言する。
%macro createTable(col);
data &col;
set sampleData;
where &col <= 0;
keep &col;
run;
%mend;
これですべてがcall execute
ルーチンを使用するように設定されました。 call execute
を使用すると、「並列」プロセスと呼ぶことができるものでステートメントを発行できます。つまり、現在のデータステップには含まれず、SASによってコンパイルされ実行されるステートメントのスタンドアロンのチャンクとして送信されます。 '%createTable'マクロ呼び出しは、一重引用符の中に置かれています。これは重要なことです。そうでなければ、問題にぶつかります。
data _null_;
set columns;
call execute(cats('%createTable(', column, ')'));
run;
ログが今示す:
NOTE: There were 3 observations read from the data set WORK.COLUMNS.
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds
NOTE: CALL EXECUTE generated line.
1 + data column1; set sampleData; where column1 <= 0; keep column1; run;
NOTE: There were 3 observations read from the data set WORK.SAMPLEDATA.
WHERE column1<=0;
NOTE: The data set WORK.COLUMN1 has 3 observations and 1 variables.
(...)
2 + data column2; set sampleData; where column2 <= 0; keep column2; run;
NOTE: There were 4 observations read from the data set WORK.SAMPLEDATA.
WHERE column2<=0;
NOTE: The data set WORK.COLUMN2 has 4 observations and 1 variables.
(...)
3 + data column5; set sampleData; where column5 <= 0; keep column5; run;
NOTE: There were 4 observations read from the data set WORK.SAMPLEDATA.
WHERE column5<=0;
NOTE: The data set WORK.COLUMN5 has 4 observations and 1 variables.
(...)
はしたがって
- 3の観察は
- 4の観察は、フォームのCOLUMN2を維持したカラム1と呼ばれる新しいテーブル内のカラム1から維持されたことを確認します列2と呼ばれる新しい表
- 列4からの4つの観察新しいテーブルcolumn5
なぜ別のデータステップを実行しようとしていますか?また、「列からマクロにすべての変数を渡す」という意味を明確にすることはできますか?あなたが今までに試したことがどのように達成されたかは分かりません。 – superfluous
変数値または変数名を渡そうとしていますか? – Reeza
そうではありません。 call executeを使用します。 http://support.sas.com/documentation/cdl/ja/mcrolref/67912/HTML/default/viewer.htm#n1q1527d51eivsn1ob5hnz0yd1hx.htm – Reeza