SAS宏中%if%else和if else的区别

时间:2024-10-30 07:53:30

SAS宏中%if%else和if else的区别

data a;
	set x;
	%do m=1 %to 3;
		%do q=1 %to 5;
			if x&q^="nan" and &m=id and x&q="&&id&m&q"  then do;
				&&id&m&q=1;
				put '有值 且id相等' id= x&q= &&id&m&q=;
				end;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

x数据集
上面代码是正常的if else语句,它可以把变量转变成数值,就是说x&q可以代表x1-x5,但是if语句是把变量解读成值,即id=1时x1=‘张三’,字符串张三。
if结果展示
可以了看到x&q^=“nan”,没有x变量等于nan的。说明if语句把变量解读成了值。
接下来看%if代码。

%do m=1 %to 3;
	%do q=1 %to 5;

		%if x&q=nan   %then %do;
			&&id&m&q=1;
			put '有值 且id相等' id= x&q= &&id&m&q=;
			%end;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这段语句执行没有打印任何内容。

data a;
	set x;
	%do m=1 %to 3;
		%do q=1 %to 5;
			%if x&q=x1   %then %do;
				&&id&m&q=1;
				put '有值 且id相等' id= x&q= &&id&m&q=;
				%end;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这段代码执行,有结果。说明%if语句将x&q解读成x1文本,并不会将x1的值解读出来。且宏if语句中不需要用“”区别字符串,宏if语句中所代表的内容,全部都是字面意义的字符串,没有data步变量存在。只能有宏变量。