ЕСЛИ ЗАТЕМ утверждение в САС - PullRequest
0 голосов
/ 24 января 2020

Я не уверен, почему этот код не работает в 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 Ответ

1 голос
/ 24 января 2020

Оператор input сообщает SAS, как читать из текстового файла, но не указывает, где искать текст. То, что вы делаете с оператором 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;

A специальное имя файла 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; заявление, нет ввода. Бьюсь об заклад, ваш журнал что-то говорит о нулевых прочитанных строках.

Кстати, почему вы указываете Category в выражении input? Я полагаю, что это только в вашем выводе.

Еще много можно сказать о выражении infile. Например, у вас есть опции для обработки строк, в которых заполнены не все данные, например trunkover, о которых вы должны прочитать.

...