2013-07-18 6 views
-2

데이터 단계에서 매크로 호출을 사용하고 싶습니다. 아래 매크로와 데이터 단계에서 호출하지만 이것은 작동하지 않습니다. 너희들은 일하게하는 방법을 제안 해 줄 수 있니?SAS 데이터 세트에서 SAS 매크로를 사용하는 방법

%macro xscan(string, delimiter, word_number); 

%let len1=%length(&string); /*Computing the length of the string*/ 
%let len=%eval(&len1+1); 
%let sub=%scan(&string,&word_number,"&delimiter"); 

%if &word_number ge 0 %then %do; 
%let pos=%index(&string,&sub); /* Locate the position while reading left to right*/ 
%end; 

%if &word_number lt 0 %then %do; 
data _null_; 
pos=find("&string","&sub",-&len); 
call symput("pos",pos); 
run; 
%end; 

%let strg=%substr(&string,&pos); /* Extract the substring*/ 

%put the string is &strg; 
%mend; 

data work.in_data; 
length in_string $50; 
in_string = “a bb ccc dddd bb eeeee”; 
output; 
in_string = “aa b cc aa dee”; 
output; 
run; 

data work.out_data; 
set work.in_data; 
length sub_str $50; 
start_word_num = -(_n_ +1); 
sub_str = %xscan(in_string,’ ‘, start_word_num); 
run; 

proc print; run; 
+1

질문 ** 특정 문제를 설명하고 유효한 포함 그것을 재현하는 코드. 지침은 [SSCCE.org] (http://sscce.org/)를 참조하십시오. ** **해야 할 일을 설명하면 도움이 될 것입니다. – JDB

+0

참으로. 단순히 코드를 버리고 작동하지 않는다고 말하는 것만으로 충분하지 않습니다. 이것은 충분히 일반화 된 문제로 제기 될 필요가있다. – Joe

+0

데이터 스토어 (datastep)에서 사용할 함수를 만들기 위해 매크로를 사용하지 말고'PROC FCMP'를 살펴보고 싶다면. 또한, 당신이 질문 한 다른 질문에 대한 대답과 의견을 다시 읽으십시오. 당신이 말한 것을 완전히 이해하지 못했기 때문입니다. –

답변

2

매크로가 데이터 저장 내부에서 사용되는 경우 매크로 함수를 사용하여 매크로를 복잡하게 만드는 대신 데이터 저장 함수를 사용하여보다 간단하게 작성하십시오. 훨씬 적은 코드로 원하는 것을 달성 할 수있게 해주는 많은 SAS 문자열 함수가 있습니다.

0

데이터 단계는 매우 유연하며 매우 유연한 날짜에 데이터를 조작 할 수 있습니다. 코드를 리펙토링하여 데이터 스토어 만 사용하려고하는 것이 좋습니다. 그래도 여전히 사용하고 싶다면 지금은 call execute을 사용하십시오. 여기 은 예입니다

data _null_ ; 
input name $ value !$ ; 
call execute 
(‘%global ‘ 
llname~l ‘;’ II 
‘%let’ Ilnamell =’ [1 
value II ‘;’ 
); 
cards ; 
abc xyz 
; 

더 읽기이 문서를 참조하십시오 http://www2.sas.com/proceedings/sugi30/154-30.pdf 코드 작성하신해야 ** 문제와 직결 http://www2.sas.com/proceedings/sugi22/CODERS/PAPER70.PDF

+0

OPs의 경우, 매크로 함수가 순수 매크로 코드가 아니기 때문에'call execute'가 작동하지 않습니다. 데이터 스텝 등이 포함되어 있기 때문에'call execute'가 작동하지 않습니다. –

관련 문제