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,那么它就是这样定义的。解决方案与您的尝试类似,只是您应该使用 LENGTH
或 ATTRIB
语句来显式定义变量长度,而不是强制 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;
我有一系列数据集,这些数据集是通过使用 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,那么它就是这样定义的。解决方案与您的尝试类似,只是您应该使用 LENGTH
或 ATTRIB
语句来显式定义变量长度,而不是强制 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;