BASE SAS의 불균형 견적 조건을 해결하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/107414

  •  01-07-2019
  •  | 
  •  

문제

기본 SAS 프로그래머로서 귀하는 다음과 같은 훈련을 알고 있습니다.

균형이 맞지 않는 견적이 포함된 SAS 코드를 제출하면 이제 닫히지 않은 견적뿐만 아니라 닫히지 않은 주석, 매크로 함수 정의 및 누락된 실행도 얻게 됩니다.아니면 그만 두세요.성명.

불균형한 인용문이 당신을 괴롭히지 않도록 하는 가장 좋은 비결은 무엇입니까?

도움이 되었습니까?

해결책

엔터프라이즈 가이드 3에서는 자동으로 생성된 코드 상단에 다음 줄을 추가했습니다.

*';*";*/;run;

그러나 모든 종류의 불균형 문제를 실제로 "재설정"하는 유일한 방법은 sas 세션을 종료하고 코드를 다시 제출하기 전에 균형이 맞지 않는 모든 문제의 균형을 맞추는 것입니다.이런 종류의 빠른(저렴한?) 해킹을 사용하면 근본 원인이 해결되지 않습니다.

그런데, ods _all_ close; 닫는다 모두 기본 결과 대상을 포함한 ods 대상.대화형 세션에서는 다음을 사용하여 다시 열어야 합니다. ods results; 또는 ods results on; 적어도 문서에 따르면.하지만 9.2에서 테스트했을 때 아래와 같이 작동하지 않았습니다.

%put sysvlong=&sysvlong sysscpl=&sysscpl;
/* sysvlong=9.02.01M0P020508 sysscpl=X64_VSPRO */

ods _all_ close;
proc print data=sashelp.class;
run;
/* on log
WARNING: No output destinations active.
*/

ods results on;
proc print data=sashelp.class;
run;
/* on log
WARNING: No output destinations active.
*/

다른 팁

저 같은 경우는 보통 "SAS 불균형 견적"에 대한 Google, 그리고 결국 다음과 같은 것을 제출하게 됩니다. 이것:

*); */; /*’*/ /*”*/; %mend;

...닫히지 않은 주석, 인용문 및 매크로 기능을 중단합니다.

여기 제가 사용하는 것이 있습니다.

 ;*';*";*/;quit;run;
 ODS _ALL_ CLOSE;
 QUIT; RUN;

매크로에서 따옴표가 불균형한 상황이 발생했는데 유일한 해결책은 SAS 인스턴스를 닫고 다시 시작하는 것이었습니다.

저는 이것이 SAS에서 용납할 수 없는 결함이라고 생각합니다.

그러나 나는 #2와 #5의 방법을 모두 사용했고 효과가 있었습니다.먼저 #2, 그다음 #1입니다.내 코드 헤더를 포함하여 모든 코드 위에 배치하여 이 프로그램이 수행하는 작업을 설명했습니다.

매력처럼 일했습니다.

나는 주어진 SAS 프로그램을 읽고 쌍으로 제공되어야 하는 항목을 추적하는 Perl 프로그램을 작성했습니다.삽입할 수 있는 괄호 등을 사용하면 모든 줄의 시작 부분에 중첩 수준을 인쇄합니다.매크로 환경에 있지만 데이터 단계 함수를 호출하는 %sysfunc 호출을 포함하여 매크로 함수의 일부인 괄호와 데이터 단계 함수의 일부인 괄호를 구별할 수 있어야 합니다(%syscall 매크로에 대해서도 유사하게 수행해야 함). 함수 호출), 정규 표현식을 통해 가능합니다.중첩 수준이 음수로 변하면 문제가 근처에 있을 수 있다는 단서입니다.

또한 프로그램 시작부터 작은따옴표와 큰따옴표 수를 세기 시작하고, 발견한 각 기호의 개수가 홀수인지 짝수인지 식별합니다.괄호와 마찬가지로 매크로 코드의 일부인 따옴표와 데이터 단계 코드의 일부인 따옴표 및 O'Riley 및 %nrstr(%'%")와 같은 리터럴 문자열의 일부인 따옴표를 구별할 수 있어야 합니다. 계산하지 않지만 패턴 일치도 이를 처리할 수 있습니다.

일치하지 않는 항목의 문제가 매크로 코드에 의해 런타임에 생성된 코드에서 발생하여 소스 프로그램에 없는 경우 mfile 옵션을 활성화하여 생성된 데이터 단계 코드를 파일에 쓴 다음 perl 스크립트를 실행합니다. 그 코드에 반대합니다.

나는 강력한 패턴 일치 기능 때문에 Perl을 선택했지만 다른 패턴 일치 언어도 잘 작동할 것입니다.도움이 되었기를 바랍니다.

언제든지 submit submitments 명령을 실행하고 실행하려는 것을 다시 제출할 수 있습니다.

AFHood의 제안을 반복해서 사용하고 싶었습니다. ODS _ALL_ CLOSE; 성명.이것이 포함되어야 할 핵심 요소입니다.그리고 어쨌든 ODS를 끝낼 때마다 그것을 사용하도록 하세요.

내 경우에는 SAS 세션을 닫는 것이 효과가 있었습니다.여기에 언급된 다른 방법을 시도하기 전에 이 방법을 한 번 시도해 볼 수 있을 것 같습니다.

예, 공식 SAS 문서에서는 귀하가 직접 제안한 솔루션을 권장한다고 생각합니다.

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