Мне нужно сохранить значение определенной переменной в шаге данных в макросе, а затем использовать этот макрос в том же шаге данных.я пробовал с SYMPUT
, но если я правильно понял, макропеременная, созданная таким образом, не может быть использована внутри одного и того же шага данных (я думаю, она назначается в конце шага данных)
Здесьэто упрощенный пример.У меня есть список полей данных t1,...,t100
, представляющих что-то происходящее в определенное время, события, представленные числами, и поле данных t_start
, дающее мне время начала процесса, в котором я заинтересован для каждого наблюдения.Я хочу проверить, есть ли у меня все данные, и отказаться от наблюдения в противном случае.Я хочу действовать следующим образом.
DATA WANT;
SET HAVE;
CALL SYMPUT('START_TIME', t_start);
DO I=&START_TIME. TO 100;
IF t_&I. = . THEN DELETE;
END;
RUN;
Это не работает, я думаю, по причинам, упомянутым выше.Есть ли обходной путь?
Замечания:
- Я упростил ситуацию, реальный случай, на который я смотрю, более сложный (например, переменные не называются
t1,...t100
, а что-тос немного большей структурой).Если возможно, я хотел бы получить что-то максимально приближенное к подходу, который я привел выше, так как разные решения могут быть неприменимы к моему случаю.Конечно, если это невозможно, тогда любое решение более чем приветствуется! - Я попытался посмотреть на
RESOLVE
, но, похоже, оно не соответствует тому, что я ищу (или, по крайней мере, я ненедостаточно хорошо понимаю, чтобы заставить его делать то, что я хочу). - В крайнем случае, я мог бы попытаться решить проблему, используя два шага данных, один из которых определял макропеременные, другой использовал его дляпроверьте и удалите нежелательные наблюдения.Я бы предпочел избегать этого решения, если это возможно.
Обновление: Я решил проблему с помощью массивов, как предложено в решениях.