как отформатировать данные в PRO C SQL - PullRequest
0 голосов
/ 02 марта 2020

У меня небольшая проблема с форматированием данных из PRO C SQL в SAS. Я хочу сделать извлечение из нескольких столбцов, но с указанием позиции каждого столбца и длины, например:

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;

Ответы [ 2 ]

0 голосов
/ 02 марта 2020
  1. В формате Z10.
  2. SAS по умолчанию покинет панель. Вы можете управлять выравниванием другими способами, поэтому в этом нет никакой реальной ценности. Но вы можете просто использовать PUT(var, format -l), чтобы выровнять значение влево.
  3. Используйте ddmmyyB10. в качестве формата.
0 голосов
/ 02 марта 2020

Если вы спрашиваете, как получить эти указанные c форматы:

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), '/', ' ')

...