해시 객체는 처음이지만 자세한 내용을 알고 싶습니다. 가능할 때마다 가능한 모든 proc sql과 regular merges를 hash로 대체하는 방법을 찾으려고합니다. SASHELP 데이터 세트로 놀면서 나는 다음과 같은 문제에 부딪쳤다.SAS 해시 객체 : 멀티 데이터 병합
나는 10 가지 고유 한 관측치 (자동차 제조업체)의 데이터 세트를 가지고 있는데,이 자동차의 다양한 모델을 포함하는 다른 테이블과 비교하기를 원한다고 가정 해보자. 그래서 차는 그 테이블에서 반복합니다. 주의해야 할 또 다른 중요한 점은 내가 찾는 테이블에 모든 자동차 제조사가있는 것은 아니지만 여전히 내 테이블에 보관하고 싶습니다. 테이블 X 테이블 자동차도 있었다 모든 다음 call missing(model)
정확히 내가 원하는 것을 할 것입니다 후 output
명령을 제거하게되면
proc sql noprint;
create table x as select distinct make
from sashelp.cars;
quit;
data x;
set x (obs = 10);
if make = "GMC" then make = "XYZ";
run;
data hx (drop = rc);
if 0 then set sashelp.cars(keep = make model);
if _n_ = 1 then do;
declare hash hhh(dataset: 'sashelp.cars(keep = make model)', multidata:'y');
hhh.DefineKey('make');
hhh.DefineData('model');
hhh.DefineDone();
end;
set x;
rc = hhh.find();
do while(rc = 0);
output;
rc = hhh.find_next();
end;
if rc ne 0 then do;
call missing(model);
output;
end;
run;
:
아래 코드를 살펴 보자. 그러나 나는 또한 "XYZ"를 테이블에 남겨두기를 원합니다. 당신이 볼 수 있듯이make model
==========
Acura MDX
Acura RSX Type S 2dr
Acura TSX 4dr
... (skipping a few rows)
Acura NSX coupe 2dr manual S
Acura
Audi A4 1.8T 4dr
은 위의 표에서, 마지막으로 두 번째에 누락 된 모델이있다 : 그것과 같이, 일치하는 모든 모델을 찾을 후
기존의 코드는, 그러나, 빈 생산 열. 이 패턴은 모든 make가 끝날 때 나타납니다.
이 문제를 해결하는 방법에 대한 제안은 매우 높이 평가 될 것입니다.
많은 감사합니다.
감사합니다. Joe, 정말로 감사드립니다. 당신이 맞습니다, 해시가 여기에 올바른 해결책이 아닐 수도 있습니다. 해시를 사용하여 어떻게 그러한 연산을 대체 할 수 있는지 알기를 바랍니다. – IVR
해시 오브젝트는 확실히 흥미롭고 때로는 더 나은 옵션입니다. SAS-L 메일 링리스트를받는다면 Paul Dorfman (원래 Hashers 중 한 명이었던)을 포함하여 다양한 일을하는 가장 좋은 방법에 대한 흥미로운 토론을 자주 볼 수 있습니다. – Joe