我在格式化SAS上PROC SQL的数据时遇到了一个小问题我想提取几列,但指定每列的位置和长度,例如:
number (position 0 , length 10, fill the rest with zero on the right)
Name ( position 11 , length 20 , fill the rest with spaces on the right)
Date ( position 21 , length 8 , delete "/" between DD MM YYYY) ......
谢谢
proc sql;
create table CC as
select SUBSTRING(Num_Compte from 16 for 8) ,
pmin.DANAIS,
pmin.CDNSDPTZ,
pmin.NNSCMNZ,
pmin.NOADR,
pmin.SIREN,
pmin.NIC,
pmin.NOM_PAT,
amin.LBLGMTPL,
amin.NOVOIE,
amin.CDTYVOI,
amin.LIBVOIE,
amin.LIBLD,
amin.CDPOST,
amin.LBLCDST,
amin.CDINSDPT,
amin.NINSCMN
from sasuser.toto
inner join saspcmb.pmin on SUBSTRING(Num_Compte from 16 for 8) = ident
inner join saspcmb.amin on SUBSTRING(Num_Compte from 16 for 8) = ident ;
quit;
- 使用
Z10.
格式 - SAS默认情况下会离开键盘。您可以通过其他方式控制对齐,因此这样做没有实际价值。但是您可以使用
PUT(var, format -l)
来左对齐该值 - 使用
ddmmyyB10.
作为您的格式
如果您询问如何获得这些特定格式:
1.number (position 0 , length 10, fill the rest with zero on the right)
等于:
input(substr(column, 1, 10), 10.)*(10**10/10**countc(substr(column, 1, 10),'','D'))
SAS具有前导零格式,但没有尾随零格式。您可以使用以下公式填充零的数量:
[Number]*(10^[Pad Length]/10^[Length of Number])
2.Name ( position 11 , length 20 , fill the rest with spaces on the right)
等于:
substr(column, 11, 20) length=20
3.Date ( position 21 , length 8 , delete "/" between DD MM YYYY)
等于:
tranwrd(substr(column, 21, 8), '/', ' ')