Как инициализировать простую матрицу в SAS? - PullRequest
0 голосов
/ 20 сентября 2018

Я новичок в SAS и большую часть времени использую R.Я застрял с простой и неприятной проблемой.Все, что я хочу сделать, это создать простую матрицу 3 X 3 в SAS.Но это выдает ошибку.Мне нужна помощь в понимании того, что происходит.Документация SAS не очень полезна.

data matrixTest;
 input Y $ X;
 cards;
 4 0
 3 1
 1 1
 ;
run;

/*Convert X to a categorical variable*/
data matrixTest;
set matrixTest;
if X = 0 then X = "0";
else X = "1";
run;

/*Get design matrix from the regression model*/
 proc transreg data=matrixTest design;
  model class(X/ zero=last);
  output out=input_mcmc(drop=_: Int:);
 run;



mX = {5 4 3, 4 0 4, 7 10 3};

И я получаю следующую ошибку при создании матрицы mX:

ERROR 180-322: Statement is not valid or it is used out of proper order.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018
  1. Не используйте одно и то же имя набора данных в операторах SET и DATA.Это затрудняет отладку, потому что вы уничтожили исходный набор данных.

  2. Вы не можете изменять типы на лету в SAS.Если переменная - символ, она остается символом.

  3. Если переменная числовая, вы назначаете значения без кавычек, кавычки используются для символьных переменных.

  4. Ваша попытка создать категориальную переменную не имеет смысла, учитывая тот факт, что она уже равна 0/1.Убедитесь, что ваши тестовые данные отражают вашу реальную ситуацию.

Я не знаком с PROC TRANSREG, поэтому я не могу комментировать эту часть, но это те проблемы, с которыми вы сталкиваетесь сейчас.

Как уже упоминал кто-то, SAS не является матричным языком, он обрабатывает данные построчно, а это означает, что он может обрабатывать действительно очень большие наборы данных, поскольку ему не нужно загружать их в память.

Ваш набор данных matrixTest по сути является набором данных и готов к работе.Вам не нужно преобразовывать его в матрицу или «инициализировать» его.

Если вам нужен набор данных с этими значениями, то создайте его как набор данных:

data mx;
input var1-var3;
cards;
5 4 3
4 0 4
7 10 3
;
run;
0 голосов
/ 20 сентября 2018

Ваша ошибка в том, что SAS не является языком матрицы.SAS больше похож на язык баз данных;единицей операции является набор данных, аналогичный таблице SQL или кадру данных в R или Python.

SAS имеет встроенный в систему матричный язык, SAS / IML (интерактивный матричный язык), но это не такчасть базового SAS и не совсем то, что вы используете в контексте, который вы показываете.То, как вы вводите данные как часть вашей программы, - это то, как вы делали это на первом шаге данных, с помощью данных.

Примечание: вы также показываете некоторые тенденции R на втором шаге данных;вы не можете преобразовать тип переменной таким образом.SAS имеет только «числовой» и «символьный», поэтому у вас все равно нет «категориального» типа данных;просто оставь все как есть.

...