1

PROC IMPORT を使用して Stata 形式のデータ セットをインポートしていますが、IF ステートメントを使用していくつかの新しい変数も作成したいと考えています。ただし、このようなコードを単純に使用すると、「エラー 180-322: ステートメントが無効であるか、不適切な順序で使用されています」というエラーが返されます。:

PROC IMPORT
    DATAFILE = "myfile.dta"
    DBMS = DTA
    OUT = mydata
    REPLACE;
IF close < 10 THEN val = "low";
ELSE val = "high";
RUN;

ODS TRACE ON を使用しても、ログ ファイルにデータ ステップのコードが生成されません。ここで IF ステートメントを使用する別の方法はありますか?

更新: PROC IMPORT の後に DATA ステップを追加すると、次のようになります。

PROC IMPORT
        DATAFILE = "myfile.dta"
        DBMS = DTA
        OUT = mydata
        REPLACE;
RUN;

DATA mydata;
    IF close < 10 THEN val = "low";
    ELSE val = "high";
RUN;

PROC PRINT DATA=mydata;
RUN;

これは、次のような空のテーブルのみを出力します。

close | val
      | high

データセットを調べると、元のデータが含まれていないことがわかります。

4

2 に答える 2

4

if他の人が述べたように、内でステートメントを使用することはできませんproc import。後続のデータ ステップ内に配置することで、正しい軌道に乗ってifいます。構文が少し間違っているだけです。次のようになります。

DATA mydata2;    /* A NEW DATASET CALLED MYDATA2 WILL BE CREATED. NOTE THERE IS NO EQUALS SIGN */
    set mydata;  /* IT WILL BE BASED OFF THE MYDATA DATASET */
    IF close < 10 THEN val = "low";
    ELSE val = "high";
RUN;
于 2012-10-03T19:39:43.990 に答える
1

SAS プロシジャで IF を使用することはできません。IF はデータ ステップに属します。

アップデート

proc import ...;
run;

data mydata;
set mydata;
length val $4; **ensure right length;
if close<10 then val='low';
else val='high';
run;
于 2012-10-03T18:57:54.260 に答える