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

Matrix 如何在SAS中初始化简单矩阵?,matrix,sas,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 =

我是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.

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

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


旁注:在第二个数据步骤中,您还显示了一些R趋势;不能以这种方式转换变量的类型。SAS只有“数字”和“字符”,因此您没有“分类”数据类型;保持原样。

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

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

旁注:在第二个数据步骤中,您还显示了一些R趋势;不能以这种方式转换变量的类型。SAS只有“数字”和“字符”,因此您没有“分类”数据类型;就这样吧

  • 不要在set和data语句中使用相同的数据集名称。这使得调试变得很困难,因为您已经破坏了初始数据集

  • 您不能在SAS中动态更改类型。如果一个变量包含一个字符,它将保持字符

  • 如果变量是数字,则赋值时不带引号,引号用于字符变量

  • 鉴于分类变量已经是0/1,您尝试创建分类变量的做法毫无意义。确保您的测试数据反映了您的实际情况

  • 我不熟悉PROC TRANSREG,因此我无法对该部分发表评论,但这些是您现在面临的问题

    正如其他人提到的,SAS不是一种矩阵语言,而是逐行处理数据,这意味着它可以处理非常非常大的数据集,因为它不必将数据加载到内存中

    您的数据集matrixTest本质上是一个数据集,随时可用。您不需要将其转换为矩阵或“初始化”它

    如果需要具有这些值的数据集,请将其创建为数据集:

    data mx;
    input var1-var3;
    cards;
    5 4 3
    4 0 4
    7 10 3
    ;
    run;
    
  • 不要在set和data语句中使用相同的数据集名称。这使得调试变得很困难,因为您已经破坏了初始数据集

  • 您不能在SAS中动态更改类型。如果一个变量包含一个字符,它将保持字符

  • 如果变量是数字,则赋值时不带引号,引号用于字符变量

  • 鉴于分类变量已经是0/1,您尝试创建分类变量的做法毫无意义。确保您的测试数据反映了您的实际情况

  • 我不熟悉PROC TRANSREG,因此我无法对该部分发表评论,但这些是您现在面临的问题

    正如其他人提到的,SAS不是一种矩阵语言,而是逐行处理数据,这意味着它可以处理非常非常大的数据集,因为它不必将数据加载到内存中

    您的数据集matrixTest本质上是一个数据集,随时可用。您不需要将其转换为矩阵或“初始化”它

    如果需要具有这些值的数据集,请将其创建为数据集:

    data mx;
    input var1-var3;
    cards;
    5 4 3
    4 0 4
    7 10 3
    ;
    run;