我有两个数据集,都具有相同的变量名称。在其中一个数据集中,两个变量具有字符格式,但在另一个数据集中,所有变量都是数字。我使用以下代码将数值变量转换为字符,但数字正在变化 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;
您发布的代码很混乱。它的一半看起来像是从字符转换为数字的代码,一半看起来像是另一个方向的代码。
要转换为字符,请使用
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 将文本转换为值。
将格式更改为 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 将根据输入数据自动分配宽度和小数点。然而,除非您明确指定,否则结果变量的长度可能很大。这仍将保留原始变量中的数字。