我有一系列数据集,这些数据集是通过使用pro sql语句从数据库中提取信息来创建的。我正在使用一个 case 语句来创建一个"定义"的字段(度量值)。然后,我使用数据步骤将这些不同的数据集合并在一起。但是,当数据集组合它们(堆叠它们)时,此字段将被截断。
示例:以下内容,"投资组合余额(带生态冲销)"被截断为"投资组合余额(带生态冲销)"。或"应用程序卷被截断为"应用程序卷"。
下面是数据步骤语句。我尝试使用格式和长度来强制字符编号,但它仍然截断了值。我还创建了一个虚拟数据集"占位符",其中包含 50 个字符的值,以尝试确保数据集中的最长值在开头,但这也没有帮助。
DATA Data.COMBINED;
format measure $45.;
SET
Data.PLACEHOLDERS
Data.GSK
DATA.SSS
DATA.MF
DATA.SRT
;
RUN;
同样,如果我查看 proc sql 语句中返回的所有数据的返回结果,将显示完整值。只有当我尝试将它们合并/堆叠在数据集中时,它们才会开始截断。 思潮?
最好修改创建原始数据集的代码,以便以标准结构创建它们。
组合两个或多个数据集有两种方法会导致字符变量截断(或明显截断)。
首先是物理截断,因为变量在数据步骤中的定义比在其中一个源数据集中的定义短。SAS 将在第一次看到变量时定义它。因此,如果第一个数据集的长度为 20 美元,那么这就是它的定义方式。 解决方案类似于您的尝试,只是您应该使用LENGTH
或ATTRIB
语句来显式定义变量长度,而不是强制 SAS 根据变量首先出现在 FORMAT 语句中的事实猜测您希望如何定义变量。
第二个截断可能只是值的显示方式。 如果您附加了宽度小于变量长度的格式,则值将在输出中显示为截断,即使它们没有真正被截断。 当通过从外部数据库拉取数据集生成数据集时,这种情况尤其可能发生,因为 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;