Eu tenho a variável global &project_path e preciso escrever uma macro %set_path
que criará outra variável global que seja igual &project_path\parameter
. No meu caso, o nome da nova variável deve ser parâmetro_path. Sou novo em macro SAS e pelo que entendi eles não podem retornar valores como funções normais, então não posso fazer algo como log_path=%set_path(log)
? Então eu tenho que passar uma nova variável como parâmetro, %set_path(log_path, log)
mas não consigo tornar o log_path Global? Como resolver este problema?
O que descobri foi definir o nome da nova variável dependendo do parâmetro. Mas só funciona se você adicionar um prefixo. Eu preciso de um postfix. E de qualquer forma, em geral, não parece a melhor opção
%macro set_path(sub_dir);
%global &sub_dirSet;
%let &sub_dirSet = &project_path\&sub_dir;
%mend set_path;
%set_path(data);
%set_path(log);
%put &dataSet;
%put &logSet;
Claro que tentei algo como
%macro set_path(var_name, sub_dir);
%global var_name;
%let var_name = &project_path\&sub_dir;
%macro set_path;
mas pelo que entendi é fundamentalmente errado
Como padrão de codificação geral, geralmente é uma boa ideia evitar a criação de muitas variáveis macro globais. Mas para sua pergunta sobre como adicionar um postfix, você pode usar a
.
para finalizar uma referência de variável de macro e adicionar um postfix. Então, acho que sua abordagem funcionaria com:Isso está simplesmente errado:
porque você não pode criar uma variável de macro global com o mesmo nome de uma variável de macro local existente. E mesmo que você pudesse, não haveria como atribuir um valor a ele com uma instrução% LET, já que a variável macro local teria precedência.
Mas não era isso que você realmente queria fazer. Em vez disso, você queria usar o VALOR do parâmetro como o nome da variável macro global.