Это как-то связано с моим другим вопросом в последнее время.
Настройка Я читаю в символьных переменных типа 1 или 2,0 или 10,0 или 2,5. Я хочу преобразовать их в цифры, используя десятичную точку вместо запятой.
Поэтому в идеале я хотел бы получить следующий результат:
1 -> 1
2,0 -> 2
10,0 -> 10
2,5 -> 2.5
Мой код
data _null_;
test='5,0';
result=input(test_point,comma10.1);
put 'this should be:' result;
run;
делает это для всех символьных переменных, которые имеют тип 'xy, z', но не для 'xy' без разделения запятых. Здесь я бы получил
xy -> x,y
Я думал добавить if / else, чтобы проверить, имеет ли длина строки символов 1 или больше. Так что-то вроде
data _null_;
test='5';
if length(test)=1 then result=input(test, comma10.);
else result=input(test, comma10.1);
put 'this should be:' result;
run;
Но проблема здесь в том, что
10 -> 1
Проблемы с 10,00 (который должен быть 10), ставшим 100, возможно, можно решить, заменив ',' на '.', Но символы без десятичного разделителя остаются проблемой.
Есть ли какое-нибудь умное решение для этого?
Мое решение , которое немного хакерское (и в основном использует только тот факт, что запятая вводит длину> 2 - проблемы с, например, 123 по-прежнему будут возникать):
data _null_;
t='5,5';
test=tranwrd(t, ',', '.');
if length(test)=1 or length(test)=2 then result=input(test, comma10.);
else result=input(test, comma10.1);
put 'this should be:' result;
run;