2015-01-16 3 views
3

첫 번째 질문은 여기에 있습니다.SAS에서 반복적 인 이분법 구현

기본적으로 매크로의 사용을 통해 SAS에서 재귀적인 이분법 알고리즘을 구현하려고합니다. 이미 두 개의 인수 (현재 간격의 하위 끝점과 상위 끝점)를 사용하고 다른 간격의 두 끝점을 포함하는 테이블을 생성하는 매크로를 작성했습니다. 문제는 간격의 너비가 특정 임계 값 이하가 될 때까지이 프로세스를 반복하는 매크로를 작성하는 것입니다.

내가 지금까지 가지고있는 것이지만, 예상대로 코드가 작동하지 않습니다. SAS에 대해 배웠던 모든 것의 99 %를 기억하십시오. 지난 3 일 정도 학습했습니다. 도움을 줄 수있는 사람에게 많은 감사를드립니다! %nextint(&a0,&b0) 하나 명 관찰하고 두 개의 열 및 &a0&b0로부터 계산 된 값과 ab있는 테이블을 생성 interval

data interval; 
    input a b; 
    datalines; 
      0 1 
      ; 
run; 

%macro iter(a,b); 
data rec; 
    set interval; 
    %let a0 = &a; 
    %let b0 = &b; 
    %do %while(%sysevalf(&b0 - &a0) > .00001); 
      %nextint(&a0,&b0); 
      call symput('a0',trim(left(a))); 
      call symput('b0',trim(left(b))); 
    %end; 
run; 
%mend; 

. 아시다시피 SAS는 내게 미스테리입니다. 나는 무엇을하고 있는지 알지 못합니다.

+0

몇 가지 반복을 추가 할 수 있습니까? 또한 nextint가하는 일, 제대로 작동하는지 확인 하시겠습니까? PROC FCMP – Reeza

답변

3

% nextint 매크로가 무엇인지 모르지만 % iter 매크로가 실행되는 방식을 보여주기 위해 무언가를 썼습니다.

데이터 스텝에 해당 콜 워드 심트를 넣어야합니다.

간격 데이터 세트에서 매크로 변수 a0 및 b0에 대한 새 값을 얻기 위해 여기 null을 사용했습니다.

참고 a와 b에 대한 첫 번째 값 집합이있는 간격 데이터 집합이 생성됩니다. 여기서 b - a는 0.0001보다 작습니다.

매크로 끝의 % put 문은 각 interation에 대한 a와 b의 값 변경을 보여줍니다.

%macro nextint(a1,b1); 
     data interval; 
      a = &a1. + 0.1; 
      b = &b1. - 0.1; 
     run; 
    %mend; 


    %macro iter(a,b); 
     %let a0 = &a.; 
     %let b0 = &b.; 
     %do %while(%sysevalf(%sysevalf(&b0. - &a0.) > 0.0001)); 
      %nextint(&a0,&b0); 
      data _null_; 
       set interval; 
       call symput('a0',strip(a)); 
       call symput('b0',strip(b)); 
      run; 
      %put &a0.; 
      %put &b0.; 
      %put %sysevalf(&b0. - &a0.); 
     %end; 
    %mend; 

    %iter(0,1); 
+0

당신은 내 인생을 구했어 @ _ @ 너무 고마워! – heropup

+0

도와 드리겠습니다. – KnowYourOnion

1

수치 해석 작업을 수행하려면 SAS/IML 구문을 살펴 보시기 바랍니다.

This blog Rick Wicklin이 SAS/IML을 사용하여 함수의 루트를 찾는 방법을 설명합니다.

매크로와 데이터 단계를 계속 사용하려면 options mprint; 문을 사용하여 코드를 디버그하고 실제로 실행 된 명령을 로그에서 볼 수 있습니다.

+0

을 통해 맞춤 기능이있는 데이터 단계에 더 적합 할 수 있습니다. 의견을 보내 주셔서 감사합니다. 그러나 IML이 아닌 기본 SAS에만 액세스 할 수 있으므로이 특정 알고리즘을 구현해야합니다. – heropup