我正在使用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
并检查数据集显示它不包含任何原始数据。
答案 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;