2014-12-08 2 views
0

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; 

나는 쉽게 이름에 액세스하여 인쇄 할 수 있습니다. I는 사용자 정의 모듈 매트릭스를 전달할 때, 상기 모듈 내부의 열 이름 사라 (모듈을 실행 주석 처리 이전 PROC의 IML에서 선)

proc iml; 
    start myModule(MatrixWithHeader); 
     print MatrixWithHeader; 
     print (MatrixWithHeader[,"a"]); 
    finish myModule; 
    store module=myModule; 
run; 

I 다음 오류 얻었다 :

ERROR: (execution) Character argument should be numeric. 

모듈의 행렬 이름에 어떻게 액세스 할 수 있습니까?

열 번호로 액세스하면 코드가 융통성을 잃게됩니다. 가능한 해결 방법은 열 이름의 벡터를 인수로 전달하고 모듈 내에서 mattrib를 실행하는 것입니다. 그러나 mattrib를 반복하는 것은 번거롭고이 경우에는 myMatrix에서 코드 이름을 추출해야합니다. 예를 들어 코드와 같이 긴 코드로 정의되므로 이름의 벡터를 사용할 수 없습니다. 사전에

감사합니다,

알렉스

솔루션에 대한

감사를 해결했다.

답변

0

유일한 해결책은 GLOBAL clause을 사용하고 속성이있는 원래 매트릭스에 액세스하는 것입니다. SAS/IML은 참조로 인수를 전달하지만 MATTRIB 지정을 유지하지 않습니다 (최근에이 점을주의했습니다.) 또한 매트릭스 속성을 반환하기 위해 호출 할 수있는 함수는 없습니다 (특히 열 이름) 때문에 행렬에서 열 이름을 추출한 다음 모듈에 이름을 다른 매개 변수로 전달할 수 없습니다.