テキストファイルを取り込み、その内部のマクロ参照を置き換えて1つの出力ファイルに追加するプログラムを作成しようとしています。マクロ参照は、データセット内の観測を反復するときに生成されます。データセット内のすべての観測でファイルを1行ずつ読み込みます。
ソーステーブルの各観測について、テキストファイル全体を読み込もうとしています。 infile
ステートメントにend=
オプションを使用していることに関連する暗黙的なstop
命令があります。このステートメントは、各レコードが繰り返し処理されないようにしています。私は例の下に、テンプレートやコードを簡素化しました
:ここ
は私が移入しようとしているテンプレートです:
INSERT INTO some_table (name,age)
VALUES (&name,&age);
ここ
は、SASコードです:
filename dest "%sysfunc(pathname(work))\backfill.sql";
data _null_;
attrib line length=$1000;
set sashelp.class;
file dest;
infile "sql_template.sas" end=template_eof;
call symput('name', quote(cats(name)));
call symput('age' , cats(age));
do while (not template_eof);
input;
line = resolve(_infile_);
put line;
end;
run;
上記のコードを実行すると、目的の出力ファイルが生成されますが、データセット内の最初の観測のみが生成されます。
感謝を。私の元の試みがうまくいかない理由を説明できますか?私は理解を向上させたいと思っています... –
データステップの最初の反復で完全な入力テキストファイルを読み込みます。それから、データステップの次の観測に行くときにSASが最初からテキストファイルを読み始めるようにSASに指示する方法はありませんでした。 FILEVARオプションを使用することにより、ファイル名の値が変更されたときに入力テキストファイルを閉じて再オープンします。 – Tom
ああ、申し訳ありませんが、以前のコメントでもっと明確にする必要がありました。私を混乱させたのは、観測1の後に私のコードが実際に私のデータセットの処理を停止することでした!私の 'data _null_'文を' data tmp'に変更すると、ノート内では単一の観察だけが読み取られます。これは私が理解していないものです。 –