Question

J'ai une chaîne qui ressemble à ceci:

 "ABAR_VAL", "ACQ_EXPTAX_Y",  "ACQ_EXP_TAX", "ADJ_MATHRES2"

Et je voudrais à ressembler à ceci:

ABAR_VAL ACQ_EXPTAX_Y ACQ_EXP_TAX ADJ_MATHRES2

i.e.. aucun apostrophes ou des virgules et un espace unique séparés.

Quelle est la façon de faire propre / le plus court donc dans SAS 9.1.3?

De préférence quelque chose le long des lignes de:

call symput ('MyMacroVariable',compress(????,????,????))

Pour être clair, le résultat doit être seul espace séparé, dépourvu de ponctuation, et contenue dans une variable macro.

Était-ce utile?

La solution

Ici, vous allez ..

data test;
var1='"ABAR_VAL", "ACQ_EXPTAX_Y",  "ACQ_EXP_TAX", "ADJ_MATHRES2"';
run;

data test2;
set test;
call symput('macrovar',COMPBL( COMPRESS( var1,'",',) ) );
run;

%put &macrovar;

Autres conseils

Est-ce une partie d'une instruction infile ou êtes-vous désireux de créer en effet des variables macro qui contiennent ces valeurs? Si cela fait partie d'une déclaration infile vous ne devriez pas avoir besoin de faire quoi que ce soit si vous avez le delimiter correctement réglé.

infile foo DLM=',' ;

Et oui, vous pouvez en effet utiliser la fonction de compression pour supprimer des caractères spécifiques d'une chaîne de caractères, soit dans une étape de données ou dans le cadre d'un appel de macro.

COMPRESS(source<,characters-to-remove>)

Données de l'échantillon:

data temp;
     input a $;
datalines;
"boo" 
"123" 
"abc"
;
run;

problème de Resolve dans une étape de données (plutôt que de créer une variable macro):

data temp2; set temp;
a=compress(a,'"');
run;

problème de Resolve tout en générant une variable macro:

data _null_; set temp; 
call symput('MyMacroVariable',compress(a,'"'));
run;
%put &MyMacroVariable.;

Vous devrez parcourir les observations afin de voir les valeurs compressées pour chaque enregistrement de la variable si vous utilisez ce dernier code. :)

Pour compresser plusieurs espaces en un seul, utilisez compbl: http: / /www.technion.ac.il/docs/sas/lgref/z0214211.htm

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top