Join Now

Mellemrum i dynamiske kolonnenavne vha. makro

by Contributor SanderEhmsen on ‎09-17-2015 10:49 AM (378 Views)

Hej community

 

Jeg sidder og bøvler med at lave et dynamisk kolonnenavn til noget eksport til excel. Men det er SAS-delen, der driller. 

 

Her er lidt sample-data, som kan bruges til problemet:

DATA WORK.'slet mig'n;
LENGTH
'OMRÅDE'n $ 11
TID 8
Bruttoledige 8 ;
FORMAT
'OMRÅDE'n $CHAR11.
TID DATE9.
Bruttoledige BEST12. ;
INFORMAT
'OMRÅDE'n $CHAR11.
TID DATE9.
Bruttoledige BEST12. ;
INFILE DATALINES4
DLM='7F'x
MISSOVER
DSD ;
INPUT
'OMRÅDE'n : $CHAR11.
TID : BEST32.
Bruttoledige : BEST32. ;
DATALINES4;
Hele landet20270111381
Odense202705488
;;;;

 

Mit slutprodukt er månednavnet (på dansk) fra dato-variablen sammen med en tekststreng: Altså her 'Bruttoledige, [månednavn]'.

Nå, min tanke var at gøre det via makroer, så noget i den her stil:

 


/*Månednavnet laves vha. en bunke if-statements.*/
data test0;
set auf01_1;
if month(tid)=9 then txt='september';
else if month(tid)=1 then txt=', januar';
else if month(tid)=2 then txt='februar';
else if month(tid)=3 then txt='marts';
else if month(tid)=4 then txt='april';
else if month(tid)=5 then txt='maj';
else if month(tid)=6 then txt='juni';
else if month(tid)=7 then txt='juli';
else if month(tid)=8 then txt='august';
else if month(tid)=10 then txt= 'oktober';
else if month(tid)=11 then txt= 'november';
else if month(tid)=12 then txt= 'december';
run;

/*makrovariabel 'tilfoj' dannes med værdien fra 'tidtxt'*/
data test1;
set test0;
call symput('tilfoj', txt);
run;

 

Her ville jeg så gerne kunne lave mit nye variabelnavn. Men jeg kan ikke finde ud af at lave mellemrum i navnet.

Jeg kan kun finde ud af:

data test2;

   set test1 (rename=(Bruttoledige=Bruttoledige_&tilfoj));

drop tid tidtxt;

run;

 

Men jeg ville jo i virkeligheden gerne:

data test2;

   set test1 (rename=(Bruttoledige='Bruttoledige: &tilfoj'n));

drop tid tidtxt;

run;

 

Men her kommer det fjollede resultatet, at den ikke bruger makroen, men bare teksten.

 

Er der nogen, der har en snedig løsning?

 

Comments
by SAS Employee LasseLarsen
on ‎09-19-2015 07:34 AM

Hej,

 

I enkelt plinger får du ikke opløst din macro variabel &tilfoj (den viser kun teksten). Med " " får du opløst macro variablen. Dit step med at danne tekst til hver måned med en month funktion kan måske løses nemmere med et dansk månedsformat NLDATEMN. (husk dansk locale) Fx:

 

options locale=da_dk;

 

data test1;
set test0;
maaned_txt=put(tid,NLDATEMN.);
call symput('tilfoj', maaned_txt);
run;

 

data test2;

set test1 (rename=(Bruttoledige="Bruttoledige: &tilfoj"n));

drop tid maaned_txt ;

run;

by New Contributor JakobBørstingSørensen
on ‎09-19-2015 07:34 AM

Hej

 

Det er fordi du har sat makrovariablen i enkelte citationstegn (') istedet for dobbelte (").

 

Makrovariable og makroer, løses ikke inden for enkelte, så prøv med denne løsning:

 

data test2;

   set test1 (rename=(Bruttoledige="Bruttoledige: &tilfoj"n));

drop tid tidtxt;

run;

by Contributor SanderEhmsen
on ‎09-21-2015 06:43 AM

Tak!

 

Du kom lige et splitsekund senere, men det er præcis samme løsning. 

by Contributor SanderEhmsen
on ‎09-21-2015 06:56 AM
Tak! Og ikke mindst for at dele måden at lave danske månedsnavne. Det kan vi bruge adskillige steder.