SAS PROC SQL UNION ALL - 最小化列长度

Posted

技术标签:

【中文标题】SAS PROC SQL UNION ALL - 最小化列长度【英文标题】:SAS PROC SQL UNION ALL - minimizes column length 【发布时间】:2020-01-06 11:28:43 【问题描述】:

我有 8 个表,所有表都包含相同的顺序和列数,而一个名为 ATTRIBUTE 的特定列包含长度为 4 到 25 的不同数据。当我使用 PROC SQL 和 UNION ALL 表时,ATTRIBUTE 列数据长度in 最小化到最低(4 位数)。 我该如何解决,即保持数据的全长?

【问题讨论】:

通常 PROC SQL 使用所有数据集中的最大长度,因此长度应为 25,但格式与第一个数据集保持一致,因此您看到的字符较少。 (或者当它是一个数字变量但长度超过 25 时的数字也不起作用) 我刚刚使用了另一个数据集作为 UNION ALL 中的第一个数据集,它设置了其余表的长度。谢谢 这不是我说的。它只设置格式! 无论哪种方式 - 它都有效 【参考方案1】:

例如,@Lee

data have1;
  attrib name length=$10 format=$10.;
  name = "Anton Short";
run;

data have2;
  attrib name length=$50 format=$50.;
  name = "Pippy Longstocking of Stoyville";
run;

* column attributes such as format, informat and label of the selected columns
* in the result set are 'inherited' on a first found first kept order, dependent on 
* the SQL join plan (i.e. the order of the tables as coded for the query);

proc sql;
  create table want as
  select name from have1 union
  select name from have2
  ;

proc contents data=want varnum;
run;

格式比长度短,任何较长值的输出显示都将在数据级别被截断。

* attributes of columns can be reset,
* (cleared so as to be dealt with in default manners),
* without rewriting the entire data set;

proc datasets nolist lib=work;
  modify want;
  attrib name format=;  * format= removes the format of a variable;
run;

proc contents data=want varnum;
run;

【讨论】:

以上是关于SAS PROC SQL UNION ALL - 最小化列长度的主要内容,如果未能解决你的问题,请参考以下文章

sas:proc sql select into 有多个输出

proc sql加入SAS中最接近日期

Proc SQL SAS导出到CSV抛出访问错误

SAS/PROC-SQL 从具有唯一键的表转换为具有相同键的多行表

在 SAS proc-sql 中将数据分组

根据来自另一个数据集的 PROC SQL 的结果更新 SAS 数据集