Join Now

Juletip #15 - Når det er surt det er specielt…

by SAS Employee FrankEckhausen ‎12-15-2015 03:26 AM - edited ‎12-15-2015 03:27 AM (377 Views)

Hvis du har skulle indlæse CSV filer fra en Windows bruger på din Linux server eller andre kombinationer af blandede miljøer, måske koblet med national karaktersæt? Så har du måske også oplevet at det kan give problemer med specielle karakterer.

Jeg arbejder en del med SAS Financial Management hvor vi oplever at når dimensioner skal loades til databasen – så kan en uskyldig national karakter blive omdannet til noget som maskinen ikke kan lide hvis den ikke bliver flyttet korrekt mellem klienten og Linux serveren.

Hidtil har jeg brugt forskellige metoder til at rette dette problem:

  • Compress funktion med modifier
    • tekst=compress(tekst,,’knt’);
      • keep digits + english characters + underscore, remove trailing blanks
    • tekst=compress(tekst,,’kad’);
      • keep alphabetic + digits
  • translate funktion
  • Perl regular expressions

Men nu har jeg fundet en metode jeg mener er bedre – specielt hvis man kører med UTF-8 på serveren. Det er en funktion som kom med SAS 9.2 kaldet Kpropchar.

Med denne funktion bliver ikke printbare karakterer fjernet eller konverteret: tekst=kpropchar(tekst);

Hvis man vil konvertere alle karaktervariable i et SAS datasæt:

 

data konv;
  set stagefm.internal_org;
  array _char {*} _character_;
  drop i;
  do i = 1 to dim(_char);
    _char{i} = kpropchar(_char{i});
  end;
run;

 

 

Nu bruger vi Data Integration jobs lavet i DI Studio og her kan vi så nemt tilføje den ekstra behandling af karakter felter som set her i mappings på target siden:

dimapping.png

Hvilket vil generere koden:

….

   proc sql;

      create view work.W4ENE24 as

         select

            VALID_FROM_DTTM,

            SOURCE_SYSTEM_CD,

            (kpropchar(ORGANIZATION_NM)) as ORGANIZATION_NM length = 50,

            ORGANIZATION_DESC,

Hvis du vil vide mere om emnet kan jeg anbefale dette paper  ”Non Printable & Special Characters: Problems and how to overcome them” (http://www.lexjansen.com/nesug/nesug10/ff/ff04.pdf)

KPROPCHAR Function

https://support.sas.com/documentation/cdl/en/nlsref/67964/HTML/default/viewer.htm#p0akoceg4sx7arn1ah...

COMPRESS Function

http://support.sas.com/documentation/cdl/en/lefunctionsref/67960/HTML/default/viewer.htm#n0fcshr0ir3...

PRXCHANGE Function

https://support.sas.com/documentation/cdl/en/lefunctionsref/67960/HTML/default/viewer.htm#n0r8h2fa8d...

 

God jul.

/Frank Eckhausen