我正在编写一个代码,试图在char字符串中查找最小值,请参见下面的示例代码:
data a;
array a(2) $ a1 a2;
array b(2) b1 b2;
a1='1,2,3,';a2= '1,3,4';
i=0;
do until (i>=2);
i=i+1;
b(i)=min(strip(tranwrd(a(i),","," ")));
end;
run;
我得到以下注释,b(i)的值为空。 注意:第32行第10列中的无效数字数据'1 2 3'。 注意:第32行第10列的数字数值为'1 3 4'。
能否请您提出一种使此类字符串数组最少的方法。
答案 0 :(得分:2)
您不能将字符串表达式传递给MIN()函数,使其无法像在编译时传递数值常量那样运行。您也许可以使用resolve()
函数,使用宏处理器来帮助评估字符串,就好像它们是数字常量一样。
do i=1 to dim(a);
b(i)=input(resolve(cats('%sysfunc(min(',a(i),'))')),32.);
end;
但是,仅解析字符串并将其转换为代码中的数字可能更清晰,更轻松。
do i=1 to dim(a);
do j=1 to countw(a(i),',');
b(i)=min(b(i),input(scan(a(i),j,','),32.));
end;
end;
答案 1 :(得分:1)
您可以执行以下操作:
data _null_;
params = '1,2,3,';
do i = 1 to count(params, ',') + 1;
min_param = min(min_param,scan(params,i,','));
end;
put _all_;
run;
我确定您可以设置数组等,以对多个变量执行相同的操作。