【问题标题】:Stalled data step in SASSAS中的停滞数据步骤
【发布时间】:2015-11-18 17:26:54
【问题描述】:

我是一名 SAS 新手用户,我正在尝试对具有 198 行和 1611 列的数据集运行数据步骤。我认为我在数据步骤中没有做任何特别精细的事情,但它永远不会完成。如果有人能指出我的代码中是否/哪里有问题,我将不胜感激。谢谢!

DATA merged2;
    set merged;
    Q1_rec_activity=.;
        IF (.< PA <150) THEN Q1_rec_activity=0;
        IF (. < PA >=150) THEN Q1_rec_activity=1;
    IF (PA_Q3 == 8) THEN PA_Q3=0;
    IF (PA_Q3 == 9) THEN PA_Q3=9999;
    PA_calc_activity=.;
        IF (. < PA_Q3 < 9999) and (. < PA_Q4) THEN PA_calc_activity=PA_Q4*PA_Q3;
        IF (PA_Q3==9999) THEN PA_calc_activity=9999;
    LABEL AGE='Age'
            DEM_1='Birth Year'
            DEM_2='Gender'
            DEM_3='Marial status'
            DEM_4='Hispanic/Latino'
            DEM_5='Race'
            DEM_7='Educational attainment'
            DEM_8='Employment status'
            DEM_10='Work schedule'
            DEM_11='Coworkers'
            DEM_12='Health insurance'
            DEM_14='Income'
            MODULE='Module'
            TobScreen_1='Qualtrics 1 smoke cigarettes'
            TOB_Q1='CHART tobacco module smoke cigarettes'
            TobScreen_3='Qualtrics 1 smoke cigars, cigarillos, or filtered cigars'
            TOB_Q3='CHART tobacco module smoke cigars, cigarillos, or filtered cigars'
            Exercise_Time='Qualtrics 1 minutes of moderate activity'
            PA_Q4='CHART PA module minutes of moderate activity'

    RUN;

【问题讨论】:

  • 您在 Label 语句的末尾缺少一个分号。此外,SAS 中的相等测试是单个 = 而不是多个 == (PA_Q3==9999) 应该是 PA_Q3=9999。
  • 您还应该考虑将一些 if 更改为 if/else if,因为条件本质上是 if/if then 条件。

标签: sas datastep


【解决方案1】:

由于您在标签语句末尾缺少分号,SAS 将RUN 视为标签语句的一部分。因此,它永远不会遇到步骤边界(通常是 RUN、QUIT、DATA 或 PROC 语句),因此永远不会真正编译和运行您的代码。

正如 Reeza 在 cmets 中指出的那样,您的代码中也存在一些错误。 == 在 SAS 中不正确;单个等号适用于相等和赋值。如果您喜欢使用两个不同的符号,可以使用 eq 来表示相等(尽管在某些选项和参数上下文中您仍然需要使用 =)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    相关资源
    最近更新 更多