0

Unix サーバーのコードの一部が機能していませんが、PC SAS では機能します。UNIX SAS で実行すると、出力データセット pc_pf_yes_1 と pc_pf_no_1 の観測値はどちらも 0 ですが、エラーは観測されません。PC SAS では、コードは正常に機能し、意図したとおりにデータセットに入力されます。

以下のデータステップはマクロ内にあります。

data pc_pf_yes_1 pc_pf_no_1;
    set pc_&month._2;
    if primary_flag = "Y" then output pc_pf_yes_1;
    else if primary_flag = "N" then output pc_pf_no_1;
run;

primary_flag は、値 Y と N を持つバイナリ変数で、長さ 1 の文字列として格納されます。データ選択用の月名を格納するマクロ変数です。

私が知らないマクロ内の UNIX SAS の癖はありますか?

4

1 に答える 1

2

データを確認してください。primary_flag の値の先頭にスペースがあるか小文字の場合、'Y' または 'N' のいずれとも一致しません。末尾のスペースは重要ではないことに注意してください。先頭のスペースを確認するには、変数を$QUOTE.フォーマットで出力してみてください。

テキスト ファイルからデータを読み取る場合、primary_flag の末尾にキャリッジ リターンが含まれる場合がありますが、これも通常の出力ではわかりにくいものです。PC では、キャリッジ リターンは行末マーカーの一部ですが、Unix はライン フィードを行末マーカーとして使用するだけなので、キャリッジ リターンはデータ内で終わる可能性があります。INFILE ステートメントで TERMSTR=CRLF オプションを使用します。compress(primary_flag,'0d'x)または、キャリッジ リターン文字を削除するために使用できます。これらの文字やその他の隠し文字を表示するには、$HEX.format を使用してデータを印刷できます。またはLINE、テキスト ファイルを読み取るデータ ステップでステートメントを使用します。

于 2015-10-07T15:01:48.517 に答える