sas,最简单的任务:将输入值分配给全局变量
sas, simplest task: assign input value to a global variable
有点困惑如何将输入值分配给变量我可以进一步传递给宏或在“数据”语句之外使用,例如全局变量。
这是代码:
&let gvar=;
%macro mm ( in1 );
%put &in1;
%mend;
data _null_;
infile stdin;
input resp $ ;
/* This works, displaying the value user has entered */
put resp;
/* This passes the word "resp" instead of a received value */
%mm (resp);
/* This passes a blank value instead of a received value */
%mm (&resp);
/* This also assigns the word "resp" instead of a received value */
%let gvar=resp;
stop;
run;
%put &gvar;
输出:
$ Value11
Value11
resp
WARNING: Apparent symbolic reference RESP not resolved.
resp
根据 Tom 的建议,这是工作部分,但是,出于某种原因,从标准输入读取了两行,而不是 1 行。
data _null_;
infile stdin obs=1;
input resp $ ;
call symputx('gvar',resp,'g');
/* I do have to put/uncomment the stop instruction below to force a single-line input */
*stop;
run;
让我们从您所说的开始,并添加代码以根据数据步骤中的值创建一个宏变量。使用 CALL SYMPUTX() 函数。要强制宏变量进入全局符号 table(即使您是 运行 宏范围内的数据步骤),请使用可选的第三个参数。
data _null_;
infile stdin obs=1;
input resp $ ;
call symputx('gvar',resp,'g');
run;
有点困惑如何将输入值分配给变量我可以进一步传递给宏或在“数据”语句之外使用,例如全局变量。
这是代码:
&let gvar=;
%macro mm ( in1 );
%put &in1;
%mend;
data _null_;
infile stdin;
input resp $ ;
/* This works, displaying the value user has entered */
put resp;
/* This passes the word "resp" instead of a received value */
%mm (resp);
/* This passes a blank value instead of a received value */
%mm (&resp);
/* This also assigns the word "resp" instead of a received value */
%let gvar=resp;
stop;
run;
%put &gvar;
输出:
$ Value11
Value11
resp
WARNING: Apparent symbolic reference RESP not resolved.
resp
根据 Tom 的建议,这是工作部分,但是,出于某种原因,从标准输入读取了两行,而不是 1 行。
data _null_;
infile stdin obs=1;
input resp $ ;
call symputx('gvar',resp,'g');
/* I do have to put/uncomment the stop instruction below to force a single-line input */
*stop;
run;
让我们从您所说的开始,并添加代码以根据数据步骤中的值创建一个宏变量。使用 CALL SYMPUTX() 函数。要强制宏变量进入全局符号 table(即使您是 运行 宏范围内的数据步骤),请使用可选的第三个参数。
data _null_;
infile stdin obs=1;
input resp $ ;
call symputx('gvar',resp,'g');
run;