2013-11-06 3 views
0

Я хочу создать 1, 2, 3 мерные переменные/массивы внутри proc iml. Мой код выглядит следующим образом:Преобразование кода Fortran в SAS

proc iml; 
start Mean1(x);   /*this is 1 dimension variable/array*/ 
Mean1(x)=sum(x)/dim(x); 
finish; 

proc iml; 
start Mean2(x);   /*this is 2 dimension variable/array*/ 
Mean1(x)=sum(x)/dim(x); 
finish; 

proc iml; 
start Mean3(x);   /*this is 3 dimension variable/array*/ 
Mean1(x)=sum(x)/dim(x); 
finish; 

Я пытался сделать так:

proc iml; 
declare double x[dim(n),dim(n)]; 
start Mean2(x);   /*this is 2 dimension variable or array*/ 
Mean1(x)=sum(x)/dim(a, x); 
finish; 

Но это не работает. Не могли бы вы помочь мне?

+0

Вы используете IML Studio с языком IML + или базовым PROC IML? Какую версию SAS вы используете? – DomPazz

ответ

2

Здесь есть несколько вещей, чтобы узнать.

  1. SAS IML массивы - это 1 индексный массив строк в стиле St. Не колонка майор, как Фортран.
  2. Насколько я знаю, в IML нет трехмерных массивов. Всегда возможно, я ошибаюсь.
  3. Все номера в SAS - это удваиваются.
  4. У IML есть хорошие операторы сокращения, которые делают легко и очень быстрые.

Чтобы объявить матрицу/массив, используйте J (nrow, Ncol, заполнить) Функция:

proc iml; 
x = J(10,5,1); /*Declare a 10x5 matrix filled with 1s*/ 
x = normal(x); /*Fills matrix X with random numbers, uses the values in X as the seed*/ 

mean_all = x[:]; /*mean over all values in x*/ 
mean_col = x[:,];/*mean of each column */ 
mean_row = x[,:];/*mean of each row */ 

print mean_all; 
print mean_col; 
print mean_row; 

quit; 

Я настоятельно рекомендую идти через IML документации. http://support.sas.com/documentation/onlinedoc/iml/index.html

+0

Я не эксперт по IML, но я согласен - обычно нет возможности напрямую обрабатывать массивы/матрицы размерности 3+. http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.116.6563&rep=rep1&type=pdf подробно рассказывает о том, как вы можете это сделать, используя вектор 'levels', но я не уверен как легко превратить это в то, что вы здесь делаете. – Joe

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