대신 해시 객체를 사용하십시오. 먼저 "매트릭스"가 아닌 일반 데이터 세트로 요금을 바꾸십시오. 아니면 그냥 원래대로 만들 수 있습니다.
data rates;
do type=1 to 3 ;
do time=1 to 3 ;
input rate @@ ;
output;
end;
end;
cards;
.1 .2 .3 .4 .5 .6 .7 .8 .9
;
이제 예제 데이터를 만들어 보겠습니다. 나는 rate 테이블의 레코드와 일치하지 않는 레코드 하나를 포함 시켰습니다.
data have ;
input type time amount expected;
cards;
1 2 100 20
2 3 100 60
4 5 100 .
;
이제 HASH 오브젝트로 속도를로드 전류와 TYPE TIME 결합에 대한 비율을 찾을 .FIND() 메소드를 사용한다.
data want ;
set have ;
if _N_ = 1 then do;
declare hash h(dataset:"rates");
rc = h.defineKey('type','time');
rc = h.defineData('rate');
rc = h.defineDone();
call missing(rate);
drop rc;
end;
if (0=h.find()) then payment=amount*rate;
run;
결과.
Obs type time amount expected payment rate
1 1 2 100 20 20 0.2
2 2 3 100 60 60 0.6
3 4 5 100 . . .
출처
2017-11-22 17:13:12
Tom
60 개의 열이 모두 숫자입니까? 예를 들어, 3 행 5 열로 샘플 데이터를 게시하는 것이 좋습니다. – Quentin
배열에 6,000 개의 변수를 모두로드하려는 이유가 무엇입니까? 임시 배열입니까, 아니면 데이터 세트에 저장 하시겠습니까? 여기에 유스 케이스는 무엇입니까? 매우 일반적인 데이터 구조가 아니며 SAS에서 매우 쉽게 사용되는 2 차원 배열보다 일을 처리하는 다른 방법이있을 수 있습니다. – Joe
나는 많은 금액에 걸쳐 60 개의 할인율을 적용하고 있습니다. 현재 4 가지 할인 유형이 있습니다. 그 솔루션을 코딩했지만 _n_ 다른 할인 유형 및 _m_ 다른 할인 기간을 일반화하는 방법을 찾지 못했습니다. 나는 100K 이상의 금액을 가지고 있으며 현재 가치 계산은 트랜잭션의 다른 구성 요소에 대해 여러 번 수행해야한다. (나는 다양한 트랜잭션 구성 요소를 처리하기 위해 자체 생성 코드를 사용한다.)하지만 현재 가치를 계산하는 핵심 부분은 생각하는 것이 더 효율적 일 것입니다. – candlejack