【问题标题】:How to add new column in to a dataset in SAS using proc SQL?如何使用proc SQL将新列添加到SAS中的数据集中?
【发布时间】:2021-12-26 19:08:10
【问题描述】:

我正在尝试根据另一列的二进制条件向数据集添加一个新列。但是,我不断收到错误消息。我的代码如下:

proc sql;
alter table data
    add Status (case WHEN missing(DeactReason) THEN 'Active' ELSE 'Inactive)'
   END;
quit;

但是,我收到以下错误:

143  proc sql;
144  alter table data
145      add Status (case WHEN missing(DeactReason) THEN 'Active' ELSE 'Inactive)'
                    -
                    79
ERROR 79-322: Expecting a CHECK.

146     END;
           -
           79
ERROR 79-322: Expecting a ).

147  quit;

谢谢! 编辑: 更正了代码:

proc sql;
alter table table
    add Status (case WHEN missing(DeactReason) THEN 'Active' ELSE 'Inactive')
   END;
quit;

现在得到以下错误:

148  proc sql;
149  alter table table
150      add Status (case WHEN missing(DeactReason) THEN 'Active' ELSE 'Inactive')
                    -                                                            -
                    79                                                           22
                                                                                 76
ERROR 79-322: Expecting a CHECK.

ERROR 22-322: Syntax error, expecting one of the following: !, !!, &, *, **, +, -, /, <, <=,
              <>, =, >, >=, ?, AND, BETWEEN, CONTAINS, END, EQ, EQT, GE, GET, GT, GTT, IN, IS,
              LE, LET, LIKE, LT, LTT, NE, NET, NOT, NOTIN, OR, ^, ^=, |, ||, ~, ~=.

ERROR 76-322: Syntax error, statement will be ignored.

151     END;
152  quit;

【问题讨论】:

    标签: sql sas


    【解决方案1】:

    ALTER TABLE 语句用于添加新列、删除现有列或修改列格式。 Afaik 你不能在 alter table 语句中使用 CASE 表达式。不过,您可以在 UPDATE 语句中执行此操作。

    proc sql;
        alter table data add status char label= "Status" format=$8.;
        update data set status=case when missing(DeactReason) then 'Active' else 'Inactive' end;
    quit;
    

    【讨论】:

      【解决方案2】:

      您不能使用 SQL ALTER 语句插入数据。

      但修改现有数据集不是正常的分析步骤。 Plus 很危险,因为如果出现问题,您可能会破坏原始数据集。

      只需创建一个包含所需附加信息的新数据集。

      使用 PROC SQL 使用 SQL。

      proc sql;
        create table new as 
        select *
             , case WHEN missing(DeactReason) THEN 'Active' 
                    ELSE 'Inactive' 
               END as STATUS
        from old
        ;
      quit;
      

      或者使用普通的 SAS 代码。

      data new; 
         set old;
         if missing(DeactReason) THEN STATUS='Active  ';
                                 ELSE STATUS='Inactive';
      
      run;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多