我有一系列数据集,这些数据集是通过使用pro sql语句从数据库中提取信息而创建的。我正在使用一个case语句创建一个“定义”种类的字段(度量)。然后,我使用数据步骤将这些不同的数据集合并在一起。但是,当数据集将它们组合(堆叠)时,该字段将被截断。
示例:以下“ Portfolio余额(带/环保充电关闭)”被截断为“ Portfolio余额(带/ Eco-Charge关闭)”或“申请量被截取为” Application Volume”。 / p>
下面是数据步骤语句。我尝试使用格式和长度来强制字符数,但它仍会截断值。我还创建了一个虚拟数据集“占位符”,其值包含50个字符,以尝试确保数据集中最长的值是在开始处,但这也无济于事。
DATA Data.COMBINED;
format measure $45.;
SET
Data.PLACEHOLDERS
Data.GSK
DATA.SSS
DATA.MF
DATA.SRT
;
RUN;
同样,如果我查看proc sql语句中返回的所有数据的返回结果,则会显示完整值。只有当我尝试将它们合并/堆叠到数据集中时,它们才会开始被截断。 有想法吗?
答案 0 :(得分:3)
最好修改创建原始数据集的代码,以便它们以标准结构创建。
有两种方式可以将两个或多个数据集组合在一起,从而导致字符变量被截断(或截断)。
第一个是物理截断,因为在数据步骤中定义的变量比在一个源数据集中的定义要短。 SAS会在第一次看到变量时对其进行定义。因此,如果第一个数据集的MEASURE的长度为$ 20,则这就是定义的方式。解决该问题的方法与您的尝试类似,只是您应该使用LENGTH
或ATTRIB
语句来显式定义变量长度,而不是强迫SAS猜测您要如何基于以下内容定义变量变量首先出现在FORMAT语句中的事实。
第二个截断可能只是显示值的方式。如果您附加了一个宽度小于变量length的格式,那么即使输出中的值未真正被截断,它们也会在输出中被截断。当通过从外部数据库提取生成数据集时,这尤其可能发生,因为PROC SQL会自动分配与变量长度匹配的格式。对于字符变量,最简单的解决方案是从字符变量中删除那些格式。 SAS不需要他们知道如何显示值。
data combined;
length var1 $40 var2 $20 ;
set gks mf ;
format _character_ ;
run;
实际上,PROC SQL非常擅长解决其长度问题。这样合并数据集可能会更容易。
proc sql;
create table combined as
select * from gks
union corr all
select * from mf
;
quit;