문제

SAS에는 데이터 세트의 정렬 순서를 찾는 내재 된 방법이 있습니까?

도움이 되었습니까?

해결책

Sassy가 말했듯이, SAS가 데이터 세트가 정렬되었는지 여부를 아는 유일한 방법은 정렬을 수행했는지 또는 정렬 순서를 명시 적으로 말하는 경우입니다. 이 단계 중 하나를 수행하지 않은 경우 데이터가 모든 유형의 순서인지 알 수 없습니다.

나는 단지 그것을 분류하려는 Afhood의 아이디어를 좋아합니다. SAS가 그것이 그런 식으로 정렬되어 있다는 것을 알고 있다면 그것은 단지 당신에게 말하고 다시는 그것을하지 않을 것입니다.

NOTE: Input data set is already sorted, no sorting done

데이터 분류를 조사하기위한 다른 아이디어는 다음과 같습니다.

수동으로보고 싶다면 Proc Contents Data = libname.data; run; 그리고 출력을보십시오. Sorted라는 속성이 있습니다. 창 모드를 사용하는 경우 Explorer의 데이터 세트를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택한 다음 세부 사항 탭을 클릭하고 SortedBy 값을 볼 수 있습니다.

프로그래밍 방식 테스트 방식의 경우 Proc 컨텐츠의 출력 데이터 세트를 사용할 수 있습니다. 정렬 및 정렬 된 열에는 데이터 세트가 정렬되어 있고 어떤 변수가 정렬되는지 알려줍니다. 아래 코드를 실행하여 시도하십시오.

/* In an unsorted data set, proc contents will give missing values
   for the sorted and sortedby columns of its output data */
proc contents data=sashelp.class out=class_contents noprint;run;
proc print data=class_contents;
  var memname name sorted sortedby;
run;

/* Now sort and observe the changes in the sorted and sortedby columns */
proc sort data=sashelp.class out=class_sorted; by name;run;
proc contents data=class_sorted out=class_sorted_contents;run;
proc print data=class_sorted_contents;
  var memname name sorted sortedby;
run;`enter code here`

다른 팁

데이터가 실제로 "정렬"된 경우 예. Proc 컨텐츠에 의해 생성 된 출력의 하단에 정렬 정보에 관한 작은 테이블이 있습니다.

이미 일종의 종류의 순서에 있던 데이터로 구축 된 데이터 세트에는이 정보가 첨부되지 않을 수 있으며 주문을 결정하려면 데이터를 탐색해야합니다.

당신은 사용할 수 있습니다 Attrc 기능.

문서 http://support.sas.com/onlinedoc/913/getdoc/en/lrdict.hlp/a000147794.htm

다음과 같은 것입니다

data _null_;
   dsid=open("work.a","i");
   sortby=attrc(dsid,"SORTEDBY");
   put  sortby=;
   rc=close(dsid);
run;

귀하가 해결하는 문제가 데이터 세트를 프로그래밍 방식으로 정렬 해야하는지 여부를 결정하려고한다고 가정합니다. 우리가 사용한 가장 좋은 솔루션은 의심 할 때 Proc 정렬을 단순히 사용하는 것입니다.

물론, 그것은 오버 헤드와 처리라고 말할 수 있습니다. 음, 그러나 데이터 세트가 이미 올바르게 정렬 된 경우, Proc 정렬을 알고, 최소한의 처리로 코드가 계속 이동하도록하십시오. "정렬 된 경우"로직이 내장되어 있습니다.

이것이 당신이 해결하려고하는 문제가 아니라면, 자세히 설명하면 우리가 도울 수 있는지 확인할 것입니다.

SAS가 데이터를 정렬하지 않았지만 정렬 될 수 있다고 생각되면, 정렬 된 것처럼 처리하고 결과적으로 발생하거나 발생하지 않을 수도있는 오류를 처리하려고 시도 할 수 있습니다.

* This works, swap some values to see how an error looks;
data foo;
input height;
cards;
1
2
3
4
;
run;

data _null_;
set foo;
by height;
run;

오류 상태는 매크로에서 감지 및 재설정 될 수 있지만 그 접근법은 지저분해질 수 있습니다. 그것에 대한 더 많은 정보 여기

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top