如何使用 proc SQL 将新列添加到 SAS 中的数据集中?
How to add new column in to a dataset in SAS using proc SQL?
我正在尝试根据另一列的二进制条件向数据集添加新列。但是,我不断收到错误消息。我的代码如下:
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;
ALTER TABLE
语句用于添加新列、删除现有列或修改列的格式。 Afaik 你不能在 alter table 语句中使用 CASE
表达式。不过,您可以在 UPDATE
语句中完成。
proc sql;
alter table data add status char label= "Status" format=.;
update data set status=case when missing(DeactReason) then 'Active' else 'Inactive' end;
quit;
您不能使用 SQL ALTER 语句插入数据。
但修改现有数据集不是正常的分析步骤。 Plus 是危险的,因为如果出现问题,您可能会破坏原始数据集。
只需创建一个包含所需附加信息的新数据集即可。
With SQL 使用 PROC 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;
我正在尝试根据另一列的二进制条件向数据集添加新列。但是,我不断收到错误消息。我的代码如下:
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;
ALTER TABLE
语句用于添加新列、删除现有列或修改列的格式。 Afaik 你不能在 alter table 语句中使用 CASE
表达式。不过,您可以在 UPDATE
语句中完成。
proc sql;
alter table data add status char label= "Status" format=.;
update data set status=case when missing(DeactReason) then 'Active' else 'Inactive' end;
quit;
您不能使用 SQL ALTER 语句插入数据。
但修改现有数据集不是正常的分析步骤。 Plus 是危险的,因为如果出现问题,您可能会破坏原始数据集。
只需创建一个包含所需附加信息的新数据集即可。
With SQL 使用 PROC 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;