Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SAS中将数值变量转换为字符_Sas_Character_Numeric - Fatal编程技术网

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

在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

我有两个数据集,都有相同的变量名。在其中一个数据集中,两个变量采用字符格式,而在另一个数据集中,所有变量均为数字。我使用以下代码将数字变量转换为字符,但数字的变化幅度为490.6->491。 我如何进行转换,使数字不会改变


将格式更改为类似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.
@JohnDoe
bestw.
格式的一点(注意它没有
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;