사실, 당신은 다음과 같이 쉽게 할 수있는 매크로 fonction를 사용할 수 있습니다
1) 빈 데이터 세트를 설정합니다
data result;
run;
2) 데이터 세트를 처리하는 매크로 fonction을 만듭니다. VAR 매크로 변수는 목록 B1, B2, B3, B4의 데이터 세트 수입니다.
%macro processDatasets(var);
proc iml ;
use B&var;
read all var _ALL_ into B&var;
close B&var;
g= B&var.[1,1];
ExG = B&var.[3,1];
Res = B&var.[5,1];
E =2;
R =3;
여기서 호 symputx 값과 저장 ("g", B &을 VAR. [1,1], 'G'); 그런 다음 전역 매크로 변수를 데이터 집합 to_store에 추가하십시오.
call symputx("g", B&var.[1,1], 'G');.
....
test = g/(g+(ExG/E)+(Res/(R*E)));
print g ExG res test [format = 10.6];
create try var {g ExG res test};
append;
close try;
run; quit;
매크로 변수를 현재 데이터 집합에 저장하는 방법은 다음과 같습니다.
data to_store;
g=call symget("g");
ExG=call symget("ExG");
...
run;
3) 다음은 여러 데이터 집합을 결과 집합으로 연결하는 데 유용한 정보입니다.
data result;
set result to_store;
run;
%mend processDataset;
4) 함수에 여러 호출을 수행 할 수 있습니다
%processDataset(1);
%processDataset(2);
%processDataset(3);
...
5) 또는 수의 목록을 수행 할 수 있습니다 루프 :
%macro processVarList;
%let var_list=1|2|3|4;
%let k=1;
%do %while (%qscan(&var_list, &k,|) ne);
%let VAR = %scan(&var_list, &k,|);
%processDataset(&var);
%let k = %eval(&k + 1);
%end;
%mend processVarList;
%processVarList;
6) 본을 적용 할 수 결과 데이터 세트에 저장하려는 코드 다음에 코드를 추가하십시오. 코드를 테스트하지는 않았지만 아이디어가 있습니다. 최종 결과 데이터 집합에 병합하려면 모든 변수 G, ExG, Res, E, R을 데이터 집합에 저장해야합니다.
결국 모든 결과 값을 결과 데이터 집합으로 가져옵니다.
IML을 사용하는 이유가 있습니까? 각 테이블에서 세 개의 스칼라 값을 사용하는 것처럼 보이므로 행렬 언어를 사용하는 이유를 모르겠습니다. 매크로를 사용하여 원하는 텍스트를 생성 할 수 있으므로 쉽게 IML 코드를 생성 할 수 있습니다. 그러나 IML 자체가 원하는 경우 코드를 생성하는 데 사용할 수 있다고 생각합니다. – Tom
링크 된 복제본은 "데이터 단계"이지만 개념은 여전히 IML에 광범위하게 적용됩니다. 해당 질문/답변을 살펴본 후 문제를 해결하는 데 어려움이 있으면 새로운 질문을 고려하십시오. 처음부터 매크로를 만드는 것까지, 당신은 그것을하기 위해 당신 자신에 관한 약간의 조사를하고 싶을 것입니다. 그것은 너무 광범위합니다. – Joe
@Tom : 코드와 좋은 설명에 대해 감사드립니다. 그것은 완벽하게 작동합니다. 기본적으로 필자는 IML을 사용하여 데이터를 추출하고 계산을 수행하는 가장 쉬운 방법이었으며 더 복잡한 작업으로 손쉽게 확장 할 수 있다고 생각합니다. – user3570605