2012-10-03 42 views
1

我正在使用PROC IMPORT导入Stata格式的数据集,但我想用IF语句来创建一些新的变量。但是,简单地使用这样的代码会返回错误“错误180-322:语句无效,或者它使用的顺序不正确。” :是否可以在PROC IMPORT中使用IF语句?

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之后的数据的步骤,如图所示:

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

就立即做了数据步骤PROC导入后.... –

+0

@ CarolinaJay65如何将这些数据步骤构成的?在数据步骤中,我仍然需要INFILE语句吗?如果我只是用IF语句放一个DATA步骤,它似乎会删除数据(请参阅我的编辑)。 –

回答

3

正如其他人所指出的,你不能使用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; 
+0

完美。这正是我所需要的。 SET关键字是我在搜索文档时找不到的(我确定是我自己的错误,而不是文档)。 –

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; 
+0

当我导入数据集时,没有办法创建新变量吗?由于日志没有显示任何生成的代码,我不能简单地复制生成的DATA步骤并在那里使用IF语句,但是我需要在导入数据集后创建新变量。 –

+0

您可以在数据步骤中执行infile,然后在相同的数据步骤中应用if。或者您需要在proc导入后在新数据步骤中运行if。您也可以运行导入向导,它将为您生成infile数据步骤。 –

+0

你能举个例子吗?我不确定从[文档](http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/a000146932.htm#a000209366)如何使用INFILE读取Stata文件。 –

相关问题