SAS 数据步骤截断值

SAS Data Step Truncating Values

我有一系列数据集,这些数据集是通过使用 pro sql 语句从数据库中提取信息创建的。有一个字段(Measure),我正在使用 case 语句来创建 "definition" 类型。然后我使用数据步骤将这些不同的数据集合并在一起。但是,当数据集将它们组合(堆叠)时,该字段将被截断。

示例:以下 'Portfolio Balance (w/ Eco-Charge Offs)' 被截断为 'Portfolio Balance (w/ Eco-Charge Off'。或者“申请量被截断为 'Application Volum'。

下面是数据步骤语句。我试过使用格式和长度来强制字符编号,但它仍然会截断值。我还创建了一个虚拟数据集“占位符”,它的值有 50 个字符,以尝试确保数据集中最长的值位于开头,但这也无济于事。

DATA Data.COMBINED;

format measure  .;
SET
Data.PLACEHOLDERS 
Data.GSK
DATA.SSS
DATA.MF
DATA.SRT

;
RUN;

同样,如果我查看 proc sql 语句中返回的所有数据的返回结果,则会显示完整值。只有当我尝试在数据集中 merge/stack 它们时,它们才会开始截断。 想法?

最好修改创建原始数据集的代码,以便以标准结构创建它们。

组合两个或多个数据集可以通过两种方式导致字符变量截断(或表观截断)。

第一个是物理截断,因为变量在数据步骤中的定义比在其中一个源数据集中的定义更短。 SAS 会在它第一次看到变量时定义它。因此,如果第一个数据集的 MEASURE 长度为 $20,那么它就是这样定义的。解决方案与您的尝试类似,只是您应该使用 LENGTHATTRIB 语句来显式定义变量长度,而不是强制 SAS 猜测您希望如何根据以下内容定义变量变量首先出现在 FORMAT 语句中的事实。

第二个截断可能只是值的显示方式。如果附加了一个宽度小于变量长度的格式,那么输出中的值将被截断,即使它们并没有真正被截断。这在通过从外部数据库中拉取生成数据集时尤其可能发生,因为 PROC SQL 将自动分配与变量长度匹配的格式。对于字符变量,最简单的解决方案是从字符变量中删除这些格式。 SAS 不需要他们知道如何显示值。

data combined;
  length var1  var2  ;
  set gks mf ;
  format _character_ ;
run;

实际上 PROC SQL 非常擅长解决它的长度问题。以这种方式组合数据集可能更容易。

proc sql;
create table combined as
  select * from gks
  union corr all
  select * from mf 
;
quit;