Matrix 在用户定义的模块中按列名访问矩阵列

Matrix 在用户定义的模块中按列名访问矩阵列,matrix,module,user-defined,columnname,sas-iml,Matrix,Module,User Defined,Columnname,Sas Iml,在IML过程中,我有一个带有命名列的矩阵 proc iml; myMatrix = {1 2 3, 1 4 9}; mattrib myMatrix colname={"a", "b", "c"}; print myMatrix; print (myMatrix[,"a"]); /* load module = myModule;*/ /* run myModule(myMatrix);*/ run; 我可以通过名称轻松访问和打印列。但是,当我将矩阵传递给

在IML过程中,我有一个带有命名列的矩阵

proc iml;
    myMatrix = {1 2 3, 1 4 9};
    mattrib myMatrix colname={"a", "b", "c"};
    print myMatrix;
    print (myMatrix[,"a"]);

/*  load module = myModule;*/
/*  run myModule(myMatrix);*/
run;
我可以通过名称轻松访问和打印列。但是,当我将矩阵传递给用户定义的模块时,模块内的列名将消失,以运行模块,从而取消对上一个proc iml中的行的注释

proc iml;
    start myModule(MatrixWithHeader);
        print MatrixWithHeader;
        print (MatrixWithHeader[,"a"]);
    finish myModule;
    store module=myModule;
run;
我得到了以下错误:

ERROR: (execution) Character argument should be numeric.
如何通过名称访问模块中的矩阵列

按列号访问将使代码不灵活。可能的解决方法是将列名向量作为参数传递,并在模块内运行mattrib。但是,重复mattrib很麻烦,在本例中,我需要从myMatrix中提取colnames,因为它是由一段长代码定义的,与示例中不同,并且名称向量不可用

提前感谢,

亚历克斯

解决


感谢您提供的解决方案。

我认为唯一的解决方案是使用一个并访问具有这些属性的原始矩阵。尽管SAS/IML通过引用传递参数,但它并没有像您一样保留MATTRIB赋值,我最近才注意到这一点。此外,没有函数可以调用来返回矩阵属性,特别是列名,因此无法从矩阵中提取列名,然后将列名作为另一个参数传递到模块中