SAS의 DeclareMacros 옵션 제출 : 올바르게 전송하지 못 했습니까?안녕하세요, SAS 제출 DeclareMacros 옵션을 적용하려고합니다. SAS 작업에서 변수 값을 매크로로 전송할 수 있습니다. 나는이 작은 싹둑을 만들었다 (그것은 달릴 것이다. 그러나 실패한다) :
a = "test1";
b = "test2";
Meta Connect( "sas.radiometer.dk", 8561, "", ProfileLookup );
_importsasconn = SAS Connect( "SASApp" );
SAS Submit("
data test;
x = &a;
y = &b;
run;
",
declaremacros(a,b),GetSASLog(true));
SAS 로그는 다음과 같이 말합니다 :
768 %let a=%NRBQUOTE(test1);
769 %let b=%NRBQUOTE(test2);
770
771 data test;
772 x = &a;
773 y = &b;
774 run;
NOTE: Variable test1 is uninitialized.
NOTE: Variable test2 is uninitialized.
NOTE: The data set WORK.TEST has 1 observations and 4 variables.
데이터 세트 테스트에는 다음이 포함됩니다.

나는 내가 뭘 잘못하고 있는지 보지 못한다.
친애하는
Poul Ravn Sørensen
SAS의 DeclareMacros 옵션 제출 : 올바르게 전송하지 못 했습니까?매크로 변수를 잘못 사용하고 있습니다.
데이터 단계에서 과제의 오른쪽에 그것들을 사용하려면 그것을 인용해야합니다.
a = "test1";
b = "test2";
Meta Connect( "sas.radiometer.dk", 8561, "", ProfileLookup );
_importsasconn = SAS Connect( "SASApp" );
SAS Submit("
data test;
x = \!"&a\!";
y = \!"&b\!";
run;
proc print;
run;
",
declaremacros(a,b),GetSASLog(true));
검사 매크로 변수 사용하기 자세한 내용은.
SAS의 DeclareMacros 옵션 제출 : 올바르게 전송하지 못 했습니까?안녕하세요, Jeff가 제안한 것이 무엇인지 제안합니다. 감사.
나는 datetime 변수로 여전히 씨름 중이다. 코드를 참조하십시오. 질문 : d_num에 datetime 변수의 값을 할당하려면 어떻게합니까? (Rearragend 조금 있지만 여전히 동일한 코드입니다, SAS 제출 진술 전에 제출 문자열 만 빌드됩니다.)
a = "test1";
b = "test2";
c = "'15may2019 00:00'dt";
Meta Connect( "sas.radiometer.dk", 8561, "", ProfileLookup );
_importsasconn = SAS Connect( "SASApp" );
SAS_sbmt_str =
"data test;
x = \!"&a\!";
y = \!"&b\!";
d = \!"&c\!";
d_num = ???;
run;
proc print; run;";
SAS Submit(SAS_sbmt_str, declaremacros(a,b,c),GetSASLog(true));
최고의 Poul RS
SAS의 DeclareMacros 옵션 제출 : 올바르게 전송하지 못 했습니까?SAS 매크로 변수와 매크로 변수를 따옴표로 묶은 매크로 변수를 인용 할 때 특히 혼란을 줄 수 있습니다. SAS 설명서의 전체 섹션이 있습니다. 매크로 따옴표 .
먼저 내가 시작하게하고 모든 것을 설명하기에 충분하지 않은 것을 제공하기 위해이 주제에 대해 충분히 알고 있다고 말하면서 시작하겠습니다. 당신은 아마 자주 방문을 시작해야합니다. SAS 프로그래밍 보드에 SAS 지원 커뮤니티 좀 더 철저한 설명과 언더 디인드를 얻으려고.
SAS만으로는 무엇이 필요한지 파악한 다음 JSL로 SAS를 통과시키는 방법을 찾아내는 것이 가장 좋습니다.
다음은 수행하려는 작업에 대한 SAS 구문입니다.
%let a = test1;
%let b = test2;
%let c = '15may2019 00:00'dt;
data test;
x = "&a";
y = "&b";
d = &c;
run;
proc print; run;
& a와 & b는 값을 문자열 리터럴로 사용하고 값에 따옴표가 없으므로 큰 따옴표로 묶어야합니다 (매크로 변수는 큰 따옴표로만 해결됩니다).
반면에 datetime 값을 작은 따옴표로 묶은 datetime 상수와 dt datetime 상수임을 나타냅니다. 그 매크로 값에는 이미 작은 따옴표가 들어 있기 때문에 할당의 오른쪽에 따옴표를 넣을 필요가 없습니다.
지금까지는 좋았지 만 주름이 있습니다. JSL 변수의 값을 매크로 변수로 가져 오기 위해 JMP는 % NRBQUOTE 함수를 정의하십시오. SAS Submit (..., Declare Macros (...))에서 SAS 로그를 보면 다음과 같은 것을 볼 수 있습니다 :
103 %let a=%NRBQUOTE(test1);
104 %let b=%NRBQUOTE(test2);
105 %let c=%NRBQUOTE('15may2019 00:00'dt);
JMP 변수에 특수 문자가 포함되어 있는지 JMP에서 알 수 없기 때문입니다 ( ') () + - * / <> = ¬ ^ ~;, # 공백 또는 NOT EQ NE LE LT GE GT IN SAS에서 가면성이 필요합니다.
SAS에서 동일한 작업을 수행하고 다음 코드를 제출하는 경우 :
%let a=%NRBQUOTE(test1);
%let b=%NRBQUOTE(test2);
%let c=%NRBQUOTE('15may2019 00:00'dt);
data test;
x = "&a";
y = "&b";
d = &c;
run;
proc print; run;
우리는 SAS Log에서 이것을 볼 것입니다 :
150 %let a=%NRBQUOTE(test1);
151 %let b=%NRBQUOTE(test2);
152 %let c=%NRBQUOTE('15may2019 00:00'dt);
153
154 data test;
155 x = "&a";
156 y = "&b";
157 d = &c;
NOTE: Line generated by the macro variable "C".
157 '15may2019 00:00'dt
_
386
_
76
ERROR 386-185: Expecting an arithmetic expression.
ERROR 76-322: Syntax error, statement will be ignored.
158 run;
NOTE: The SAS System stopped processing this step because of errors.
[이것이 나의 이해가 무너지는 지점이다. 난 너에게 말할 수있어 뭐 마스크 된 문자를 사용하여 매크로 변수를 사용해야하지만 더 이상 필요하지 않습니다. 왜 당신은 그렇게해야합니다. 다시 말하지만, SAS 프로그래밍 자세한 정보를 얻으려면 게시판을 참조하십시오.]
따라서 SAS 매크로 변수는 % NRBQUOTE 함수를 사용하여 JMP에 의해 정의되고 작은 따옴표가 가려지기를 원하지 않으므로 % UNQUOTE 함수를 사용해야합니다.
그래서 JSL에서는 다음과 같이 보입니다.
a = "test1";
b = "test2";
c = "'15may2019 00:00'dt";
SAS_sbmt_str =
"data test;
x = \!"&a\!";
y = \!"&b\!";
d = %UNQUOTE(&c);
run;
proc print; run;";
SAS Submit( SAS_sbmt_str, declaremacros( a, b, c ), GetSASLog( true ) );
다른 사람들은 당신의 탐험과 사용에있어서 당신이이 이슈에 관해 더 많은 것을 알기를 원할지도 모릅니다. SAS 지원 커뮤니티 . 따라서 유용한 토론 스레드에 대한 링크를 게시하십시오.
SAS의 DeclareMacros 옵션 제출 : 올바르게 전송하지 못 했습니까?JSL의 'Eval Insert'를 사용하여 다른 솔루션을 설명하고 제공 해주셔서 감사합니다. 내 목적으로는 후자의 솔루션을 사용하는 것으로 충분할 것입니다. SAS 코드로 몇 가지 사용자 선택 사항을 전송하는 것입니다. 그리고 DeclareMacros 호출은 전혀 필요하지 않습니다. 그것 없이도 작동합니다.
친애하는
Poul Ravn Sørensen
SAS의 DeclareMacros 옵션 제출 : 올바르게 전송하지 못 했습니까?또한 게시 한 예제가 SAS 측에서 매크로 변수의 힘을 실제로 필요로하지 않는다는 점을 지적해야합니다. 오히려 평가 삽입 () SAS_sbmt_str을 구축하는 것이 실제 사례가 비슷할 경우 유용 할 수 있습니다.
a = "test1";
b = "test2";
c = "'15may2019 00:00'dt";
SAS_sbmt_str = Eval Insert( "data test;
x = '^a^';
y = '^b^';
d = ^c^;
run;
proc print; run;" );
SAS Submit( SAS_sbmt_str, GetSASLog( true ) );