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;