zhengbo8 发表于 2015-5-25 18:19 
这个问题,我们研究过,可以参考:
https://bbs.pinggu.org/thread-2857321-2-1.html
您好,我还有一个问题想请教一下。我随机生成一个数据集之后。按照邓贵大的那个方法跑不出来是为什么呢?程序如下;
data _null_;
array op[4] $1. _temporary_ ('+','-','*','/');
do i=1 to 4;
do j=1 to 4;
do k=1 to 4;
slno = i-1 + 4*(j-1) + 16*(k-1);
call symputx('A' || cats(slno), '(a' || op
|| 'b)' || op[j] || '(c' || op[k] || 'd)');
call symputx('AA' || cats(slno), 'cats("(", a, "' || op || '", b, ")' || op[j] || '(", c, "' || op[k] || '", d, ")")');
slno = slno + 64;
call symputx('A' || cats(slno), '((a' || op || 'b)' || op[j] || 'c)' || op[k] || 'd');
call symputx('AA' || cats(slno), 'cats("((", a, "' || op || '", b, ")' || op[j] || '", c, ")' || op[k] || '", d)');
slno = slno + 64;
call symputx('A' || cats(slno), '(a' || op || '(b' || op[j] || 'c))' || op[k] || 'd');
call symputx('AA' || cats(slno), 'cats("(", a, "' || op || '(", b, ")' || op[j] || '", c, "))' || op[k] || '", d)');
slno = slno + 64;
call symputx('A' || cats(slno), 'a' || op || '((b' || op[j] || 'c)' || op[k] || 'd)');
call symputx('AA' || cats(slno), 'cats(a, "' || op || '((", b, "' || op[j] || '", c, ")' || op[k] || '", d, ")")');
slno = slno + 64;
call symputx('A' || cats(slno), 'a' || op || '(b' || op[j] || '(c' || op[k] || 'd))');
call symputx('AA' || cats(slno), 'cats(a, "' || op || '(", b, "' || op[j] || '(", c, "' || op[k] || '", d, "))")');
end;
end;
end;
run;
************************随机生成一个数据集***************;
data temp1;
do i=0 to 50;
a=ranbin(1212,24,0.25);
b=ranbin(1212,24,0.25);
c=ranbin(1212,24,0.25);
d=ranbin(1212,24,0.25);
output;
end;
keep a b c d;
run;
%macro doit();
%local i;
data a;
set temp1;
solved='N';
length answer $ 16;
%do i=0 %to 319;
if round(&&A&i, 1e-10) = 24 then do;
solved='Y';
answer = &&AA&i;
output;
end;
%end;
answer= ' ';
stop;
run;
%mend;
%doit;