PROC SQL: CASE WHEN EXPRESSION - WHEN 子句 2 的结果与前面的结果的数据类型不同
PROC SQL: CASE WHEN EXPRESSION - Result of WHEN clause 2 is not the same data type as the preceding results
我正在尝试创建并填充一列:'FLAG',使用来自两个表的数据:carteira_base30 和 TRIGGERS_21.
只要 carteira_base30.Data_ref 是 2015 年 12 月 31 日(格式:DATE9。),它应该从 TRIGGERS_21.D31DEC2015(数字格式的列,值为 0 和 1)检索信息。
下面的代码returns我:错误: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;
免责声明:不确定我是否正确理解了值语句的语法。
备注:
- SAS 数据集是关系表,因为它们包含有关其结构的元数据,您可以将它们与
sql
相关联,尽管它们不在数据库中
- 幸运的是,在 SAS 中,您只需在字符和数字之间进行选择。在大多数真实的数据库中,你有十几种数据类型。
我正在尝试创建并填充一列:'FLAG',使用来自两个表的数据:carteira_base30 和 TRIGGERS_21.
只要 carteira_base30.Data_ref 是 2015 年 12 月 31 日(格式:DATE9。),它应该从 TRIGGERS_21.D31DEC2015(数字格式的列,值为 0 和 1)检索信息。
下面的代码returns我:错误: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;
免责声明:不确定我是否正确理解了值语句的语法。
备注:
- SAS 数据集是关系表,因为它们包含有关其结构的元数据,您可以将它们与
sql
相关联,尽管它们不在数据库中 - 幸运的是,在 SAS 中,您只需在字符和数字之间进行选择。在大多数真实的数据库中,你有十几种数据类型。