SAS中char数组变量的最小值

时间:2018-09-11 00:54:35

标签: sas

我正在编写一个代码,试图在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'。

能否请您提出一种使此类字符串数组最少的方法。

2 个答案:

答案 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;

我确定您可以设置数组等,以对多个变量执行相同的操作。