在SAS中将数值变量转换为字符
我有两个数据集,都有相同的变量名。在其中一个数据集中,两个变量采用字符格式,而在另一个数据集中,所有变量均为数字。我使用以下代码将数字变量转换为字符,但数字的变化幅度为490.6->491。 我如何进行转换,使数字不会改变在SAS中将数值变量转换为字符,sas,character,numeric,Sas,Character,Numeric,我有两个数据集,都有相同的变量名。在其中一个数据集中,两个变量采用字符格式,而在另一个数据集中,所有变量均为数字。我使用以下代码将数字变量转换为字符,但数字的变化幅度为490.6->491。 我如何进行转换,使数字不会改变 将格式更改为类似Best8.2的格式: data tst ; set data (rename=(Day14=Day14_Character Day2=Day2_Character)) ; Day14 = put(Day14_Character, best8.2
将格式更改为类似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将根据输入数据自动分配宽度和小数点。但是,除非明确指定,否则结果变量的长度可能很大。这仍将保留原始变量中的数字。您发布的代码混乱。一半看起来像是从字符转换为数字的代码,另一半看起来像是用于另一个方向
要转换为字符,请使用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()
函数和informats将文本转换为值。我认为8.2
是正确的,而不是best8.2
。不应与十进制一起使用,它只是bestw.
@JohnDoebestw.
格式的一点(注意它没有d
,我想这是您所指的)是SAS将计算使用宽度的最佳方式(基于单个值)。因此,它不包括小数点后的数字。如果要指定,请使用w.d
(8.2
此处)。如果您希望它更像一个可以移动的浮点,可以使用bestw.
。但是千万不要bestw.d
,因为它不存在。你可能会把它与格式混淆,格式不同(注意d),整体效果也不同。“这里真是太过分了。”乔,你';是的,感谢您指出这一点,尽管best8.2确实产生了相同的结果。您试图匹配的字符变量的长度是多少?我将在这里解释您为什么使用best
,它与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;