2016-01-21 2 views
1

Переменная отдел имеет значение M & S в шаге данныхSAS - Видимая символическая ссылка не решен

set ttt;   
    DepartmentComp=Compress(DepartmentComp);*For use in making directories;  
    CALL SYMPUT('ggg',trim((division))); 
    CALL SYMPUT('fff',trim((Department))) 

В журнале отображается SYMBOLGEN: Макропеременная ФФФ решает M & S ПРЕДУПРЕЖДЕНИЯ: Видимый символические ссылка S не разрешена.

Как я могу избавиться от предупреждения, поскольку я подозреваю, что он влияет на программу?

ответ

1

Используйте %superq() для маскировки '&' и предотвращения разрешения '& S'. Вот вам пример:

60   data test; 
61   comp = "%superq(fff)"; 
62   putlog "NOTE: comp=%superq(fff)"; 
63   run; 

NOTE: comp=M&S 
NOTE: The data set WORK.TEST has 1 observations and 1 variables. 
0

Если вы используете эти переменные в последующем datastep вы могли бы использовать symget, чтобы избежать преждевременных попыток разрешения (следующим образом):

data _null_; 
    division='%myDiv'; 
    department='Food&Drink'; 
    call symputx('ggg',division); 
    call symputx('fff',department); 
run; 

data someds; 
    division=symget('ggg'); 
    department=symget('fff'); 
    putlog division= department=; 
run; 

Очки отметить:

  • Помимо повышения уровня ошибки (syscc = 4), трудно сказать, повлияет ли это предупреждение на вашу программу (если вы создадите макрокоманду & s, она будет). В любом случае, всегда лучше избегать предупреждений, если это вообще возможно.
  • Вы можете использовать symputx вместо symput, который автоматически разделит ведущие/завершающие пробелы
  • Подход% superq, предложенный floydn, является хорошим для прямого использования в макро логике.
+0

Спасибо, но как я могу использовать макрос и fff в инструкции метки, например: label division = & fff? – user3387046

Смежные вопросы