是否可以在PROC IMPORT中使用IF语句?

时间:2012-10-03 18:33:29

标签: sas

我正在使用PROC IMPORT导入Stata格式的数据集,但我还想使用IF语句创建一些新变量。但是,简单地使用这样的代码会返回错误“ERROR 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

并检查数据集显示它不包含任何原始数据。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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;