如何在PROC SQL中格式化数据



我在格式化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;
  1. 使用Z10.格式
  2. SAS默认情况下会离开键盘。您可以通过其他方式控制对齐,因此这样做没有实际价值。但是您可以使用PUT(var, format -l)来左对齐该值
  3. 使用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), '/', ' ')

相关内容

  • 没有找到相关文章

最新更新