SAS条件IF-THEN语句不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SAS条件IF-THEN语句不起作用相关的知识,希望对你有一定的参考价值。

我是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,但我不知道这没关系。

有人知道错误在哪里吗?

答案

您无法在茫茫荒野中运行IF语句或LABEL语句。它们必须是数据步骤的一部分(或支持这些语句的proc步骤的一部分)。您需要一个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;
另一答案
  1. 您需要数据步骤或过程来修改数据
  2. 您应使用DATA =将proc指向正确的数据输入
  3. 您只需要运行一次,但它有助于描述代码。

    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;
    

以上是关于SAS条件IF-THEN语句不起作用的主要内容,如果未能解决你的问题,请参考以下文章

《代码大全》阅读笔记-15-使用条件语句

(翻译)《二》语言基础--控制流语句

as3条件语句不起作用

java基础-控制流语句

如何更改SAS中所有字符变量的字符长度?

如何解决 SAS中 LAG不能在条件语句中使用的问题!