如何解决PROC SQL:CASE WHEN EXPRESSION - WHEN 子句 2 的结果与前面的结果的数据类型不同
我正在尝试创建和填充一列:'FLAG',使用来自两个表的数据:carteira_base30 和 TRIGGERS_21。
当 carteira_base30.Data_ref 为 31DEC2015(格式:DATE9。)时,它应该从 TRIGGERS_21.D31DEC2015(数值格式为 0 和 1 的列)中检索信息。
以下代码返回我:错误:WHEN 子句 2 的结果与前面的结果的数据类型不同。你能帮我吗?
PROC SQL;
CREATE TABLE carteira_base31 AS
SELECT x.*,CASE x.Data_ref
WHEN '31DEC2015'd THEN y.D31DEC2015
ELSE 'Other'
END AS 'FLAG'n
FROM carteira_base30 x
LEFT JOIN TRIGGERS_21 y
ON x.NIF = y.NIF;
QUIT;
解决方法
所有关系表 (1) 都有一个类型的列,即所有行必须在列中具有相同类型 (2) 的数据。很抱歉,您不能将数字和文本存储在同一列中,您必须下定决心。
您可以选择例如字符和代码
CREATE TABLE carteira_base31 AS
SELECT x.*,CASE x.Data_ref
WHEN '31DEC2015'd THEN put(y.D31DEC2015,1.)
ELSE 'Other'
END AS 'FLAG'n
FROM carteira_base30 x
LEFT JOIN TRIGGERS_21 y
ON x.NIF = y.NIF;
或者您可以选择例如数字和代码
CREATE TABLE carteira_base31 AS
SELECT x.*,CASE x.Data_ref
WHEN '31DEC2015'd THEN y.D31DEC2015
ELSE .
END AS 'FLAG'n
FROM carteira_base30 x
LEFT JOIN TRIGGERS_21 y
ON x.NIF = y.NIF;
其中 .
表示“失踪”。
您甚至可以对其应用格式。然后,如果您将文本放入数字字段中,您的结果将看起来,尽管您没有这样做。
proc format;
value miss_other . = 'other';
run;
proc sql;
CREATE TABLE carteira_base31 AS
SELECT x.*,CASE x.Data_ref
WHEN '31DEC2015'd THEN y.D31DEC2015
ELSE .
END AS 'FLAG'n format = miss_other.
FROM carteira_base30 x
LEFT JOIN TRIGGERS_21 y
ON x.NIF = y.NIF;
免责声明:不确定我是否正确理解了 value 语句的语法。
备注:
- SAS 数据集是关系表,因为它们包含有关其结构的元数据,您可以将它们与
sql
相关联,尽管它们并不驻留在数据库中 - 幸运的是,在 SAS 中,您只需在字符和数字之间进行选择。在大多数真实数据库中,您有十几种数据类型。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。