SAS中的IF THEN语句

时间:2020-01-24 11:28:26

标签: sas

我不确定为什么该代码在SAS中不起作用。某天可以帮忙吗?

DATA WORK.POLLUTION;
    INPUT State $ County $ City $ Month $ Year $ O3MAX $ Category;
IF O3MAX < 0.054 THEN Category = "Good";
    ELSE IF O3MAX < 0.070 THEN Category = "Moderate";
    ELSE IF O3MAX < 0.085 THEN Category = "UnhealthySensitive";
    ELSE IF O3MAX < 0.105 THEN Category = "Unhealthy";
    ELSE IF O3MAX < 0.200 THEN Category = "VeryUnhealthy";
    ELSE Category = "Dangerous";
RUN;

PROC PRINT DATA = WORK.POLLUTION;
TITLE= "O3";
RUN;

1 个答案:

答案 0 :(得分:1)

input语句告诉SAS如何从文本文件读取,但未指定在哪里寻找tekst。您使用infile语句执行的操作,例如

DATA WORK.POLLUTION;
    INFILE "C:\myFolder\myInput.txt";
    INPUT State $ County $ City $ Month $ Year $ O3MAX $ Category;
    ...;
run;

(可选)您可以通过给文件起一个名称并引用它来预先提供有关该文件的信息:

filename MY_TEXT "C:\myFolder\myInput.txt";

DATA WORK.POLLUTION;
    INFILE MY_TEXT;
    INPUT State $ County $ City $ Month $ Year $ O3MAX $ Category;
    ...;
run;

特殊的文件名是datalines,它是指datalines语句和分号之间的内联数据

DATA WORK.POLLUTION;
    INFILE datalines;
    INPUT State $ County $ City $ Month $ Year $ O3MAX $ Category;
    ...;
datalines; 
<your data comes here>
;
run;

如果您未指定INFILE语句,则将隐式使用infile datalines;,但是由于您没有给出datalines;语句,因此没有输入。我敢打赌,您的日志告诉您有关零行读取的信息。

顺便说一句,为什么在input语句中指定类别?我想它只是在您的输出中。

关于infile语句还有很多话要说。例如,您有一些选项可以处理未填写所有数据的行,例如trunkover,您应该阅读一下。