минимум переменных массива char в sas - PullRequest
0 голосов
/ 11 сентября 2018

Я работаю с кодом, в котором застрял при попытке найти минимальное значение в строке символов, см. Пример кода ниже:

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). ПРИМЕЧАНИЕ. Недопустимые числовые данные, «1 2 3», в строке 32, столбец 10. ПРИМЕЧАНИЕ. Недопустимые числовые данные, «1 3 4», в строке 32, столбец 10.

Не могли бы вы предложить способ получить минимум таких строковых массивов.

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Вы не можете передать строковое выражение в функцию 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;
0 голосов
/ 11 сентября 2018

Вы могли бы сделать что-то вроде этого:

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;

Я уверен, что вы можете настроить массивы и т. Д., Чтобы сделать то же самое с несколькими переменными.

...