SAS,将数字从字符格式转换为数字格式,保留所有前导零,但数字长度不一致

SAS,将数字从字符格式转换为数字格式,保留所有前导零,但数字长度不一致,sas,type-conversion,leading-zero,Sas,Type Conversion,Leading Zero,我在SAS EG工作,我正在尝试将字符格式的列转换为数字格式,与字符格式完全相同。数字长度不同,有些数字有一个或两个前导零 如果我用一种方法,它会去掉所有的前导零。我尝试过的另一种方法是,它将前导零添加到与列中最长数字一样长的点上,例如,一个带前导零的9位数字现在有四个前导零,因为列中最长的数字是12位。(我希望这个描述有意义) 我在SAS中工作,例如,当我运行proc内容时,它告诉我我现有的变量是长度为26的字符变量。“格式”和“信息”都为空 我需要将其转换为一个数值变量,长度为8,“F12.

我在SAS EG工作,我正在尝试将字符格式的列转换为数字格式,与字符格式完全相同。数字长度不同,有些数字有一个或两个前导零

如果我用一种方法,它会去掉所有的前导零。我尝试过的另一种方法是,它将前导零添加到与列中最长数字一样长的点上,例如,一个带前导零的9位数字现在有四个前导零,因为列中最长的数字是12位。(我希望这个描述有意义)

我在SAS中工作,例如,当我运行proc内容时,它告诉我我现有的变量是长度为26的字符变量。“格式”和“信息”都为空

我需要将其转换为一个数值变量,长度为8,“F12.”表示“format”和“BEST12.”表示“informat”,因为我计划使用它来匹配两个数据集

我在“常规”SAS中创建了以下测试数据集,但我不确定是否完全重现了我在SAS中处理的问题,例如:

data have;
input mrn $1-12;
cards;
118283586928
003875807
038087875
0385709873
0038576830
;
run;
如你所见,我有一个12位数的数字(没有前导零);两个是9位数字(带一个或两个前导零);两个是10位数(带一个或两个前导零)

任何帮助都将不胜感激


谢谢

在SAS的同一列中不可能有不同的格式。保持它们在同一列中的外观完全相同的唯一方法是将它们保持为文本。如果您需要对它们进行计算,我建议只创建第二列,其中包含它们的数值

可以使用z向数字添加前导零。格式


在SAS的同一列中不可能有不同的格式。保持它们在同一列中的外观完全相同的唯一方法是将它们保持为文本。如果您需要对它们进行计算,我建议只创建第二列,其中包含它们的数值

前导零可以使用z添加到数字中。格式


在SAS中,26位字符串不能与数字完全相同。SAS将数字存储为浮点值。可以使用CONSTANT()函数查看可以精确存储的连续整数的结尾

73    data _null_;
74     x=constant('exactint');
75     put x= comma30.;
76    run;

x=9,007,199,254,740,992
因此,如果字符变量中的值超过15位,则无法将其转换为数字

但是如果它们只有12位长,那么只需将字符串转换成数字并比较数字

proc sql;
  create table want as 
    select * 
    from a, b
    where a.mrn = input(b.mrn_string,32.)
  ;
quit;

在SAS中,26位字符串不能完全作为数字存储。SAS将数字存储为浮点值。可以使用CONSTANT()函数查看可以精确存储的连续整数的结尾

73    data _null_;
74     x=constant('exactint');
75     put x= comma30.;
76    run;

x=9,007,199,254,740,992
因此,如果字符变量中的值超过15位,则无法将其转换为数字

但是如果它们只有12位长,那么只需将字符串转换成数字并比较数字

proc sql;
  create table want as 
    select * 
    from a, b
    where a.mrn = input(b.mrn_string,32.)
  ;
quit;

您说“我计划使用它(将字符值转换为数字值)来匹配两个数据集”。匹配数值时不考虑数字格式,因此您可能可以退出这个兔子洞。在具有字符版本的值的表中,前导零是否有效?也就是说,
'00012'
'12'
意味着两种不同的情况?前导零对数字没有意义,它们只是用于显示,根本问题是什么?您最初从何处获得此数据?您说“我计划使用它(将字符值转换为数字值)来匹配两个数据集”。匹配数值时不考虑数字格式,因此您可能可以退出这个兔子洞。在具有字符版本的值的表中,前导零是否有效?也就是说,
'00012'
'12'
意味着两种不同的情况?前导零对数字没有意义,它们只是用于显示,根本问题是什么?你最初从哪里得到这些数据的?