SAS 및 기타 데이터베이스의 데이터 세트는 대부분 크며 SAS 프로그래머는 데이터를 다루는 데 특별한 기술이 필요합니다. 아래의 예제는 모든 산업에서 대형 데이터베이스를 다루는 프로그래머에게 유용한 원칙을 보여줍니다. SAS 프로그래머는 사용되는 데이터의 크기, 복잡성 및 불규칙한 특성으로 인해 임상 시험에서 일하는 것과 매우 다른 기술이 필요합니다.
데이터 세트는 일반적으로 메가바이트가 아닌 기가바이트로 측정되며, 필요한 열만 유지하고 데이터 세트 레코드의 하위 집합을 사용하여 처리를 수행하기 전에 데이터 볼륨을 최대한 줄여야 합니다.
그럼에도 불구하고 데이터 정렬을 최소한으로 유지하고 모든 단계에서 WORK에 저장된 데이터의 양을 고려하고 처리에 몇 분이 아닌 몇 시간이 걸릴 것으로 예상해야 합니다.
각 질병 및 치료 영역마다 코딩 요구 사항이 다르기 때문에 SAS 코드 중 일부만 재사용할 수 있습니다. 대부분의 경우 각 분석에 대해 새 프로그램을 작성해야 합니다.
환자 관리를 위한 드롭다운 목록을 사용하여 임상 직원으로부터 정보를 수집하기 위해 많은 종단적 데이터베이스(임상, 재무 또는 둘 다)가 생성되어야합니다.
그 결과 매우 다른 항목이 유사한 이름과 필수이어야 하지만 필수는 아닌 데이터 값을 갖는 일반적인 불일치가 포함된 데이터가 생성됩니다. 내부 데이터 점검이 부족하면 환자 관리와 관련하여 반드시 중요한 것은 아니지만 역학 연구를 위해 데이터를 처리할 때 분석의 복잡성을 가중시키는 이상 징후가 발생할 수 있습니다.
- 성별은 남성, 여성 또는 미상으로 기록될 수 있습니다.
- 의료 사건 및 처방에는 진료 등록 날짜 이전 또는 사망 날짜 이후에 연관된 날짜가 있을 수 있습니다.
- 전립선암 및 기타 남성 관련 질환은 여성에 대해 기록될 수 있습니다.
분석 및 데이터 선택에 따라 이러한 이상 징후를 수정하거나 환자를 제거/삭제 할 수 있습니다.
그러나 대부분의 프로그래밍 노력은 관심 있는 의료 조건 또는 처방 약물을 식별하기 위한 코드를 지정하는 데 사용됩니다.
대용량 입력 데이터 세트에서는 SAS에서 해결할 수 있는 간단한 기술은 데이터를 관리하기 쉬운 Volume 으로 축소한 후 정렬하는 것이다. 아래의 코드 예제는 경과 시간에 따른 데이터 볼륨 증가 효과를 설명하기 위해 단순화되었습니다.
● Sample Data Sets
아래의 데이터는 sashelp.car의 여러 사본을 Main 데이터 세트에 저장했습니다.
%LET mult = 1000; /*1, 10, 100, 1000, 2000, 5000, 10000*/
DATA main;
SET sashelp.cars;
DO i = 1 to &mult.;
OUTPUT;
END;
RUN;
● Sample SAS Code
여기에서 만든 매크로 변수는 다음 섹션에 표시된 샘플 코드를 수정하는 데 사용할 수 있습니다.
%LET vars = Make Model Type Origin Horsepower MPG_City MPG_Highway Weight;
%LET inkeep = KEEP = &vars.;
%LET outkeep = KEEP = &vars.;
%LET datakeep = KEEP = &vars.;
%LET setkeep = KEEP = &vars.;
%LET datawhere = WHERE = (type = 'Wagon');
%LET if = IF type = 'Wagon';
%LET setwhere = WHERE type = 'Wagon';
다음은 성능을 퍼포먼스를 좋게할 수 있는 간단한 방법입니다.
- &inkeep 및 &setkeep은 처리 전에 입력 데이터의 볼륨을 줄이고 처리 후 데이터 출력 볼륨을 줄이는 &outkeep보다 더 우수합니다.
- &setnywhere는 입력 데이터를 선택하는데, 이는 읽은 후 데이터를 선택하는 &if보다 낫고 처리 후 출력 데이터를 선택하는 &datanywhere보다 낫습니다.
- 처리 전에 데이터 볼륨을 줄여서 가장 큰 이득을 얻어야 하므로 정렬하기 전에 데이터의 부분 집합을 취하면 가장 큰 이점을 얻을 수 있습니다.
다음 코드는 매크로 변수를 사용하여 기본 PROC SORT 및 DATA 단계 문을 수정하여 프로그램 성능을 조정하는 방법을 보여줍니다.
PROC SORT DATA = main (&inkeep.) OUT = outdsn (&outkeep.);
BY origin make;
RUN;
DATA final (&datakeep. &datawhere.);
SET outdsn (&setkeep.);
&if.;
&setwhere.;
RUN;
> 이 단계는 수정되지 않은 PROC SORT 단계이며 IF 문을 사용하는 DATA 단계 하위 집합입니다.
PROC SORT DATA = main OUT = subset_sort10;
BY origin make;
RUN;
DATA subset_sort11;
SET subset_sort10;
IF type = 'Wagon';
RUN;
> 이 단계는 수정되지 않은 PROC SORT 단계이며 WHERE 문을 사용하는 DATA 단계 하위 집합입니다.
PROC SORT DATA = main OUT = subset_sort10;
BY origin make;
RUN;
DATA subset_sort12;
SET subset_sort10;
WHERE type = 'Wagon';
RUN;
PROC SORT DATA = main OUT = subset_sort20 (keep = &vars.);
BY origin make;
RUN;
DATA subset_sort21;
SET subset_sort20;
IF type = 'Wagon';
RUN;
> 이 단계는 출력 데이터 세트에서 KEEP 옵션을 사용하여 변수 수를 줄이고 WHERE 문을 사용하여 DATA 단계 하위 집합을 사용하는 PROC SORT 단계입니다.
PROC SORT DATA = main OUT = subset_sort20 (keep = &vars.);
BY origin make;
RUN;
DATA subset_sort22;
SET subset_sort20;
WHERE type = 'Wagon';
RUN;
> 이 단계는 입력 데이터 세트의 KEEP 옵션을 사용하여 변수 수를 줄이고 IF 문을 사용하여 DATA 단계 하위 집합을 사용하는 PROC SORT 단계입니다.
PROC SORT DATA = main (keep = &vars.) OUT = subset_sort30;
BY origin make;
RUN;
DATA subset_sort31;
SET subset_sort30;
IF type = 'Wagon';
RUN;
> 이 단계는 입력 데이터 세트에서 KEEP 옵션을 사용하여 변수 수를 줄이는 PROC SORT 단계이며 WHERE 문을 사용하여 DATA 단계 하위 집합입니다.
PROC SORT DATA = main (keep = &vars.) OUT = subset_sort30;
BY origin make;
RUN;
DATA subset_sort32;
SET subset_sort30;
WHERE type = 'Wagon';
RUN;
다음 코드는 매크로 변수를 사용하여 기본 DATA 단계 및 PROC SORT 문을 수정하여 프로그램 성능을 조정하는 방법을 보여줍니다.
DATA datadsn (&datakeep. &datawhere.);
SET main (&setkeep.);
&if.;
&setwhere.;
RUN;
PROC SORT DATA = datadsn (&inkeep.) OUT = final (&outkeep.);
BY origin make;
RUN;
> IF 문을 사용한 DATA 단계 하위 집합과 수정되지 않은 PROC SORT 단계입니다.
DATA subset_sort40;
SET main;
IF type = 'Wagon';
RUN;
PROC SORT DATA = subset_sort40 OUT = subset_sort41;
BY origin make;
RUN;
Code: setwhere_sort
> WHERE 문을 사용한 DATA 단계 하위 집합과 수정되지 않은 PROC SORT 단계입니다.
DATA subset_sort50;
SET main;
WHERE type = 'Wagon';
RUN;
PROC SORT DATA = subset_sort50 OUT = subset_sort51;
BY origin make;
RUN;
> 출력 데이터 세트의 WHERE 절과 수정되지 않은 PROC SORT를 사용하는 DATA 단계 하위 집합입니다.
DATA subset_sort60 (WHERE = (type = 'Wagon'));
SET main;
RUN;
PROC SORT DATA = subset_sort60 OUT = subset_sort61;
BY origin make;
RUN;
> WHERE 문이 있는 DATA 단계 하위 집합으로, 입력 데이터 세트의 KEEP 옵션을 사용하여 변수 수를 줄이고 수정되지 않은 PROC SORT 단계를 따릅니다.
DATA subset_sort80;
SET main (keep = &vars.);
WHERE type = 'Wagon';
RUN;
PROC SORT DATA = subset_sort80 OUT = subset_sort81;
BY origin make;
RUN;
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9.
Early bird rate extended! Save $200 when you sign up by March 31.