首页 > 解决方案 > 防止 SAS 自动删除字符串中的尾随空格

问题描述

我有一个示例数据集,如下所示。

data d01;
   infile datalines dlm='#';
   input Name & $15. IdNumber & $4. Salary & $5. Site & $3.;
   datalines;
アイ# 2355# 21163# BR1
アイウエオ# 5889# 20976# BR1
カキクケ# 3878# 19571# BR2
;

data _null_ ;
 set d01 ;
 file "/folders/myfolders/test.csv" lrecl=1000 ;
 length filler $3;
 filler = '   ';
 w_out = ksubstr(Name, 1, 5) || IdNumber || Salary || Site || filler;
 put w_out;
run ;

我想将此数据集导出为 csv(固定宽度格式),每行的长度为 20 字节(20 个 1 字节字符)。

在此处输入图像描述

但 SAS 会自动删除我的尾随空格。所以结果将是每行 17 个字节。(填充符被截断)

我知道我可以像这样插入填充物。

put w_out filler $3.;

但这在“站点”列为空的情况下不起作用,SAS 将截断其列,结果也不是每行 20 个字节。

标签: sasspacestring-lengthtrailing

解决方案


我不太明白你想用 ksubstr 做什么,但如果你想添加填充以使总长度达到 20 个字符,你可能需要编写一些额外的逻辑:

data _null_ ;
 set d01 ;
 file "/folders/myfolders/test.csv" lrecl=1000 ;
 length filler $20;
 w_out = ksubstr(Name,1,5) || IdNumber || Salary || Site;

 len = 20 - klength(w_out) - 1;
 put w_out @;
 if len > 0 then do;
   filler = repeat(" ", len);
   put filler $varying20. len;
 end;
 else put;
run ;

推荐阅读