2015-01-14 14 views
7

Ho una variabile macro, &myvar, ma non si risolverà quando provo a inserirla in una variabile del passaggio dati. Perché no, e cosa posso fare per risolvere questo problema?Perché la mia variabile macro non viene risolta?

%let myvar=Hello, world; 
data _null_; 
    x='&myvar.'; 
    put x=; 
run; 
+1

Questo è destinato ad essere utilizzato per chiudere le domande come duplicato in cui l'unico problema è singola/doppia citando variabili macro. Se qualcun altro trova una buona già esistente, sono felice di usarla, ma potrei trovarne una che non ha altre complessità che potrebbero essere state confuse. – Joe

+2

@NEOmen In alcuni casi è più facile creare una domanda "fittizia" che abbia meno complessità di altre domande, ma risponde comunque a qualcosa che appare frequentemente e quindi usarlo come close-as-duplicate. La domanda "fittizia" dovrebbe essere tecnicamente una buona domanda (come è) ma non è ovviamente richiesta allo scopo di trovare informazioni :) – Joe

risposta

8

variabili macro in SAS non si risolvono quando si trovano tra virgolette singole, '&myvar'. Devono essere tra virgolette, "&myvar", per risolvere correttamente.

Se avete bisogno di avere apici e una variabile macro risolto, avete alcune opzioni, ma il più semplice è:

%str(%'&myvar.%') 

La %' interno della %str metterà un carattere preventivo singolo (o apostrofo) nella stringa di testo da solo senza che venga citata.

data _null_; 
    x="%str(%'&myvar.%')"; 
    put x=; 
run; 

o

%let myvar2 = %str(%'&myvar.%'); 
+1

Sono le virgolette esterne che determinano se le espressioni macro sono risolte. Se stai già circondando la stringa con virgolette doppie, non è necessario% STR() per proteggere le virgolette singole. Basta usare "'& myvar'". In una macro puoi farlo in questo modo:% sysfunc (dequote ("'& myvar' ')) – Tom

+1

Penso che Joe stava dimostrando come puoi risolvere la macro ma anche usare le virgolette singole. Potresti averne bisogno in una X o comando SYSTASK. –

Problemi correlati