2009-02-06 13 views
1

Dans SAS, en dehors d'une étape de données, quelle est la meilleure façon de remplacer un caractère dans une variable macro par un blanc?Dans SAS, en dehors d'une étape de données, quel est le meilleur moyen de remplacer un caractère dans une variable macro par un blanc?

Il semble que TRANSLATE serait une bonne fonction à utiliser. Toutefois, lorsque vous utilisez %SYSFUNC avec cette fonction, les paramètres ne sont pas entourés de guillemets. Comment indiquez-vous qu'un blanc devrait être utilisé comme remplacement?

Répondre

4

Il n'y a pas de guillemets dans le langage macro. Les seuls guillemets utilisés sont &, % etc. pour indiquer que le texte doit être interprété comme un macro "opérateur". Un blanc est représenté par %str() comme indiqué ci-dessus dans le message de la Caroline.

5

Le% str() (avec un blanc entre les parenthèses) peut être utilisé pour indiquer un blanc pour ce paramètre. Soyez également prudent avec TRANSLATE ... le 2ème param est le remplacement de char ... mais dans TRANWRD il est inversé.

%macro test ; 
    %let original= translate_this_var ; 
    %let replaceWithThis= %str() ; 
    %let findThis= _ ; 
    %let translated= %sysfunc(translate(&original, &replaceWithThis, &findThis)) ; 
    %put Original: &original ***** TRANSLATEd: &translated ; 
    %mend ; 
    %test; 

    %macro test2 ; 
    %let original= translate_this_var ; 
    %let replaceWithThis= %str() ; 
    %let findThis= _ ; 
    %let tranwrded= %sysfunc(tranwrd(&original, &findThis, &replaceWithThis)) ; 
    %put Original: &original ***** TRANWRDed: &tranwrded ; 
    %mend ; 
    %test2 
3

vous pouvez utiliser Perl reg ex au lieu, comme:

%put ***%sysfunc(prxchange(s/x/ /, -1, abxcdxxf))***; 
/* on log 
***ab cd f*** 
*/