将数值变量转换为 SAS 中的字符

问题描述 投票:0回答:2

我有两个数据集,都具有相同的变量名称。在其中一个数据集中,两个变量具有字符格式,但在另一个数据集中,所有变量都是数字。我使用以下代码将数值变量转换为字符,但数字正在变化 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;
sas character numeric
2个回答
0
投票

您发布的代码很混乱。它的一半看起来像是从字符转换为数字的代码,一半看起来像是另一个方向的代码。

要转换为字符,请使用

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()
函数与 formats 将值转换为文本。您可以使用
INPUT
语句或
INPUT()
函数与 informats 将文本转换为值。


0
投票

将格式更改为 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.
信息,SAS 将根据输入数据自动分配宽度和小数点。然而,除非您明确指定,否则结果变量的长度可能很大。这仍将保留原始变量中的数字。

© www.soinside.com 2019 - 2024. All rights reserved.