SAS условное IF-THEN утверждение не работает - PullRequest
0 голосов
/ 24 января 2020

Я начинающий пользователь SAS и в настоящее время изучаю один из курсов Coursera. Код, приведенный в лекции, не работает, хотя я не вижу ошибки. Ниже кода:

PROC IMPORT DATAFILE ='/home/student123/my_courses/nesarc_pds.csv' OUT = data  REPLACE;

LABEL TAB12MDX ="Tobacco Dependance Past 12 Months"
      CHECK321 ="Smoked Cigarettes in Past 12 Months"
      S3AQ3B1 ="Usual Smoking Frequency"
      S3AQ3C1 ="Usual Smoking Quantity";

IF S3AQ3B1=9 THEN S3AQ3B1=.;
IF S3AQ3C1=99 THEN S3AQ3C1=.;
IF CHECK321=1;
IF AGE LE 25;
PROC SORT; BY IDNUM;
PROC FREQ; TABLES TAB12MDX CHECK321 S3AQ3B1 S3AQ3C1 AGE;
RUN;

Я вижу ошибку в журнале:

80         IF S3AQ3B1=9 THEN S3AQ3B1=MISSING;
        __
        180
81         IF CHECK321=1;
        __
        180
82         IF AGE LE 25;
        __
        180
ERROR 180-322: Statement is not valid or it is used out of proper order.

Я использую SAS Studio, но не знаю, имеет ли это значение.

Кто-нибудь знает, где ошибка?

Ответы [ 2 ]

1 голос
/ 24 января 2020
  1. Вам нужен шаг данных или процедура для изменения данных
  2. Вы должны использовать DATA =, чтобы направить данные на правильный ввод данных
  3. Вам нужен только один RUN но это помогает разграничить ваш код.

    PROC IMPORT DATAFILE ='/home/student123/my_courses/nesarc_pds.csv' OUT = data  REPLACE;
    RUN;  /*3*/
    
    Data yourData; /*1*/
    set data;
    
    LABEL TAB12MDX ="Tobacco Dependance Past 12 Months"
      CHECK321 ="Smoked Cigarettes in Past 12 Months"
      S3AQ3B1 ="Usual Smoking Frequency"
      S3AQ3C1 ="Usual Smoking Quantity";
    
    IF S3AQ3B1=9 THEN S3AQ3B1=.;
    IF S3AQ3C1=99 THEN S3AQ3C1=.;
    IF CHECK321=1;
    IF AGE LE 25;
    
    run;  /*3*/
    
    PROC SORT data=yourData; /*2*/
    BY IDNUM;
    RUN; /*3*/
    
    PROC FREQ data=yourData; /*2*/
    TABLES TAB12MDX CHECK321 S3AQ3B1 S3AQ3C1 AGE;
    RUN;
    
0 голосов
/ 24 января 2020

Вы не можете выполнить оператор IF или оператор LABEL в глуши. Они должны быть частью шага данных (или части шага pro c, который поддерживает эти операторы). Вам нужен шаг DATA. (Обратите внимание, что это также хорошая идея, чтобы дать вашим наборам данных более значимые имена, чем data.)

PROC IMPORT DATAFILE ='/home/student123/my_courses/nesarc_pds.csv'
  OUT = nesarc_pds REPLACE
;
run;

data youth;
 set nesarc_pds ;
LABEL TAB12MDX ="Tobacco Dependance Past 12 Months"
      CHECK321 ="Smoked Cigarettes in Past 12 Months"
      S3AQ3B1 ="Usual Smoking Frequency"
      S3AQ3C1 ="Usual Smoking Quantity"
;

IF S3AQ3B1=9 THEN S3AQ3B1=.;
IF S3AQ3C1=99 THEN S3AQ3C1=.;
IF CHECK321=1;
IF AGE LE 25;
run;

PROC SORT data=youth; BY IDNUM; 
run;

PROC FREQ data=youth; TABLES TAB12MDX CHECK321 S3AQ3B1 S3AQ3C1 AGE;
RUN;
...