在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中提取类名,因为它是由一长段代码定义的(不像示例),并且名称向量不可用。
提前致谢,
亚历
解决
感谢您的解决方案。
答案 0 :(得分:0)
我认为唯一的解决方案是使用GLOBAL clause并访问具有属性的原始矩阵。即使SAS / IML通过引用传递参数,它也不会保留MATTRIB赋值(就像你,我最近才注意到这一点。)此外,没有函数可以调用来返回矩阵属性(特别是列名) ),因此您无法从矩阵中提取列名称,然后将名称作为另一个参数传递给模块。