如何在SAS中初始化简单矩阵?

时间:2018-09-19 21:17:36

标签: matrix sas

我是SAS新手,并且大部分时间都在使用R。我陷入一个简单而令人沮丧的问题。我要做的就是在SAS中创建一个简单的3 X 3矩阵。但这会引发错误。我需要一些帮助来了解正在发生的事情。 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 :(得分:3)

您的错误是SAS不是矩阵语言。 SAS更像是一种数据库语言。操作单位是数据集,类似于R或Python中的SQL表或数据框。

SAS确实在系统中内置了一种矩阵语言SAS / IML(交互式矩阵语言),但是它不是基本SAS的一部分,并且并不是您在所显示的上下文中真正使用的语言。在程序的第一步中,如何使用数据线输入数据作为程序的一部分。

侧面说明:在第二个数据步骤中,您还将显示一些R趋势;您不能以这种方式转换变量的类型。 SAS只有“数字”和“字符”,因此无论如何您都没有“分类”数据类型。保持原状。

答案 1 :(得分:1)

  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;