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

正如其他人所说,您不能ifproc 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 回答