ID a1 a2 a3 a4 _1 _2 _3 _4 _5 _6 _7 _8 _9
1 _1 _3 _6 _9 8 5 9 8 6 10 2 1 4
2 _2 _5 _8 _9 10 6 2 7 10 8 3 5 9
3 _1 _2 _4 _8 3 6 1 9 6 9 3 0 4
... ... ...
Здесь a1-а4 показывает число столбцов, которые соответствующее имя переменного _1-_9.I хочет создать три переменные v1, v2, v3, гдеКак передать значение переменной аргументу функции в макросе SAS?
For ID=1, v1=sum(of _1-_3), v2=sum(of _3-_6),v3=sum(of _6-_9);
For ID=2, v1=sum(of _2-_5), v2=sum(of _5-_8),v3=sum(of _8-_9);
For ID=3, v1=sum(of _1-_2), v2=sum(of _2-_4),v3=sum(of _4-_8);
.... ...
Например, для ID = 1, v1 = 8 + 5 + 9 = 22, v2 = 9 + 8 + 6 + 10 = 33.
Вот мой код:
%Macro sumup;
data test; set test;
%do n=1 %to 3;
v&n=sum (of a&n-a%eval(&n+1));
%end;
run;
%mend;
%sumup;
Проблема состоит в том, что & п и% Eval (& п + 1), рассматриваются в качестве имени переменной. Но я хочу рассматривать их значения как имя переменной. Я знаю, что в вызове execute мы можем использовать '|| a & n ||'. Но как насчет макроса? Спасибо!
Опечатка: v [_n] должно быть vs [_n]. Когда я запускал ваш код, в журнале отображается ошибка. ОШИБКА: неверная информация управления контуром DO, либо выражение INITIAL или TO отсутствует, либо выражение BY отсутствует, равно нулю или недействительно. – Jennyapple
Это означает, что поскольку [n] или как [n + 1] не существует или отсутствует. – Joe
На самом деле это потому, что они вводятся как строки. После преобразования их в числовые значения ваш код работает! Спасибо! – Jennyapple