Преобразование числовых переменных в символы в SAS - PullRequest
0 голосов
/ 05 июня 2018

У меня есть два набора данных, оба с одинаковыми именами переменных.В одном из наборов данных две переменные имеют символьный формат, однако в другом наборе данных все переменные являются числовыми.Я использую следующий код для преобразования числовых переменных в символы, но числа меняются на 490,6 -> 491. Как я могу выполнить преобразование, чтобы числа не менялись?

data tst ;
set data (rename=(Day14=Day14_Character Day2=Day2_Character)) ;
Day14 = put(Day14_Character, 8.) ;
Day2 = put(Day2_Character, 8.) ;
 drop Day14_Character Day2_Character ;
 run;

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Ваш опубликованный код запутан.Половина выглядит как код для преобразования из символа в числовое значение, а половина выглядит как для другого направления.

Для преобразования в символ используйте функцию PUT().Обычно вы хотите выровнять полученную строку по левому краю.Вы можете использовать модификатор -L в конце спецификации формата, чтобы выровнять значение по левому краю.

Таким образом, чтобы преобразовать числовые переменные DAY14 и DAY2 в символьные переменные длиной $ 8, вы можете использовать код, подобный следующему:

data want ;
  set have (rename=(Day14=Day14_Numeric Day2=Day2_Numeric)) ;
  Day14 = put(Day14_Numeric, best8.-L) ;
  Day2  = put(Day2_Numeric, best8.-L) ;
  drop Day14_Numeric Day2_Numeric ;
run;

Помните, что вы используете оператор PUT или PUT() с форматами для преобразования значений в текст.И вы используете оператор INPUT или INPUT() с информатами для преобразования текста в значения.

0 голосов
/ 05 июня 2018

Измените формат на что-то вроде Best8.2:

 data tst ;
   set data (rename=(Day14=Day14_Character Day2=Day2_Character)) ;
   Day14 = put(Day14_Character, best8.2) ;
   Day2 = put(Day2_Character, best8.2) ;
   drop Day14_Character Day2_Character ;
 run;

Вот пример:

 data test;
   input r ;
   datalines;
   500.04
   490.6
   ;
 run;

 data test1;
   set test;
   num1 = put(r, 8.2);
 run;

Если вы не хотите указывать ширину и количество десятичных знаковВы можете просто использовать BEST. informat, и SAS автоматически назначит ширину и десятичные дроби на основе входных данных.Однако длина переменной результата может быть большой, если вы не укажете ее явно.Это все равно сохранит ваши числа, как в исходной переменной.

...