У меня есть большая таблица SAS, давайте опишем колонки как столбцы A и B в символьном формате, а все остальные столбцы будут отображаться в цифровом формате (каждая переменная имеет другое имя) с неизвестной длиной N, например:Привести длину массива к другому массиву в SAS?
A B Name1 Name2 Name3 .... NameN
-------------------------------------------------
Char Char Number1 Number2 Number3 ..... NumberN
.................................................
.................................................
цель состоит в том, что численный массив Name1-Намюр подведут вниз через класс = в (к в), Так что финальный стол будет выглядеть следующим образом:
A B Name1 Name2 Name3 .... NameN
----------------------------------------
Char Char Sum1 Sum2 Sum3 ..... SumN
........................................
........................................
Для этого sum- Я описал 2 массива. Первый:
array Varr {*} _numeric_; /* it reads only numerical columns */
Затем я описал другой массив с теми же длинами (Summ1-SummN), чтобы сделать процесс суммы вверх.
Дело в том, что я могу описать длину этого нового массива вручную. Например, если имеется 80 числовых значений, то я должен написать вручную, как:
array summ {80} Summ1-Summ80;
код работает, когда я пишу это вручную. Но вместо этого я хочу написать что-то вроде
array summ {&N} Summ1-Summ&N; /* &N is the dimension of the array Varr */
Я попытался с сделай петлю и тусклой (Варра) в массиве по-разному, как:
data want;
array Varr {*} _numeric_;
do i=1 to dim(Varr);
N+1 ;
end;
%put &N;
array Summ {&N} Summ1-Summ&N;
retain Summ;
if first.B then do i=1 to dim(varr); summ(i)=varr(i) ;end;
else do i =1 to dim(varr); summ(i) = summ(i) + varr(i) ; varr(i)=summ(i); end;
drop Summ1-Summ&N;
run;
Но это не работает. Любая идея о том, как перенести длину первого массива во второй массив?
Хм, если я правильно понимаю вашу проблему, N - переменная datastep, & N вызывает макрокоманду, поэтому вы должны использовать call symput ('N', N); после цикла или лучше: call symput ('varrLen', dim (Varr)); и удалить цикл (не уверен, что n зарезервировано из глобальной макропеременной) – kl78
Теперь я попытался с обоих после цикла с вызовом symput ('N', N); и внутри цикла с вызовом symput ('varrLen', dim (Varr)); Оба указали ту же ошибку для следующего кода: массив Summ {*} Summ1-Summ & N; Ошибка: «Отсутствует числовой суффикс в списке нумерованных переменных (Summ1-SummN)». – user3714330
Я думаю, вы должны использовать summ "& N", но я не уверен, что вы можете сгенерировать имя переменной таким образом. Лучше попробуйте решение Keiths сперва – kl78