sql - 选择数字列作为字符串

标签 sql sas proc converters

是否可以在 sas 中使用 proc sql 选择数字列作为字符串?

例如,我有这个表(table_1):

+------+------+------+--------------+--+
| id_1 | id_2 | id_3 |     date     |  |
+------+------+------+--------------+--+
|    3 |    7 |    3 |  25/06/2017  |  |
|    4 |   11 |    9 |  25/06/2020  |  |
+------+------+------+--------------+--+

id_1、id_2 和 id_3 可以是数字或字符串。

我想创建一个表(table_2),其中这三列的类型应为字符串

我写了这段代码:

proc sql;

Create table table_2 as 

select date, Convert(varchar(30),a.id_1), Convert(varchar(30),a.id_2), Convert(varchar(30),a.id_3)

from table_1   a

;quit;

但是不起作用

最佳答案

最好的解决方案是修复上游流程,以始终使用一致的类型生成变量。

在 SAS 中,您可以使用 PUT() 函数将值转换为字符串,只需使用适合变量类型的 FORMAT 即可。例如,如果您的变量是数字,但它的长度应该是 9 位数字并带有有效的前导零,那么您将需要使用 Z9。格式来转换它并表示前导零。

 select put(id_1,z9.) as id_1  

如果您想将数字或字符变量转换为字符串而不首先知道变量的类型,您可以使用 CATS() 函数。但是这样您将无法控制如何将数字转换为字符串。使用 LENGTH= 属性强制 SAS 定义长度为 30 的变量。

 select cats(id_1) as id_1 length=30 

关于sql - 选择数字列作为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62638230/

相关文章:

MySQL:A列和B列累计和到B列

variables - SAS 中的动态变量名称

hadoop - 如何让 Hadoop 接受带有复合 WHERE 子句的 SAS 直通查询?

ruby - 如何评估 `Proc#==`?

Linux -/proc/PID 何时创建?

mysql - 删除 MySQL 中除重复行之外的所有重复行?

mysql - 如何在MySQL中选择转换字段?

sql - 在 Slick 中使用 DB 函数 (TRIM(LEADING '0' from column))

sas - 如何在 SAS 字符串中仅保留特定日期模式?

linux - m 标志和 o 标志将在 Linux 中存储在哪里