SAS:使用用户定义格式时,如果存在';“这不是一场比赛。”;默认值";是未格式化的输入变量吗?
在SAS例如,我有一个用户定义的格式SAS:使用用户定义格式时,如果存在';“这不是一场比赛。”;默认值";是未格式化的输入变量吗?,sas,format,user-defined,Sas,Format,User Defined,在SAS例如,我有一个用户定义的格式 value $MDC '001' = '77' '002' = '77 ... '762' = '14' etc. 我的数据集有DRG_代码字符串变量,其值为“001”和“140” 我试图用下面的代码创建一个新变量 MDC = put(DRG_code, $MDC.) 只有我的数据集中的变量DRG_代码有更多的值,然后在用户定义的格式文件中指定,$MDC. 例如,当数据集DRG_代码等于“140”时,该值在用户定义的格式中不存在,并且出于某种原因,p
value $MDC
'001' = '77'
'002' = '77
...
'762' = '14'
etc.
我的数据集有DRG_代码字符串变量,其值为“001”和“140”
我试图用下面的代码创建一个新变量
MDC = put(DRG_code, $MDC.)
只有我的数据集中的变量DRG_代码有更多的值,然后在用户定义的格式文件中指定,$MDC.
例如,当数据集DRG_代码等于“140”时,该值在用户定义的格式中不存在,并且出于某种原因,put语句返回MDC='14'(该值应仅为其值,药物代码为'762')
有没有办法确保我的put语句只在存在相应值时返回用户定义格式的值
感谢您的反馈
洛里
我曾尝试使用“length”等格式让put语句返回3,我认为这会导致“140”而不是“14”,但这不起作用
value $MDC
'001' = '77'
'002' = '77
...
'762' = '14'
MDC = put(DRG_code, $MDC.)
我假设所有的值映射都是$2,因为这是用于“未找到”源值的值。为了确保“unfound”值的长度,请确保格式化值中的一个的尾随空格填充到最长unfound值的长度
value $MDC
'001' = '77 ' /* 7 characters, presuming no DRG_code exceeds 7 characters */
'002' = '77'
'762 = '14'
我假设所有的值映射都是$2,因为这是用于“未找到”源值的值。为了确保“unfound”值的长度,请确保格式化值中的一个的尾随空格填充到最长unfound值的长度
value $MDC
'001' = '77 ' /* 7 characters, presuming no DRG_code exceeds 7 characters */
'002' = '77'
'762 = '14'
您还可以通过指定应用格式时使用的长度来解决此问题,例如
proc format;
value $MDC
'001' = '77'
'762' = '14'
;
run;
data _null_;
do var = '001','140','762';
var_formatted = quote(put(var,$MDC3.));
put var= var_formatted=;
end;
run;
输出:
var=001 var_formatted="77 "
var=140 var_formatted="140"
var=762 var_formatted="14 "
注意:此解决方案和Richard的解决方案都会将尾随空格添加到格式化值中,正如您从引号中看到的那样。您也可以通过指定应用格式时使用的长度来解决此问题,例如
proc format;
value $MDC
'001' = '77'
'762' = '14'
;
run;
data _null_;
do var = '001','140','762';
var_formatted = quote(put(var,$MDC3.));
put var= var_formatted=;
end;
run;
输出:
var=001 var_formatted="77 "
var=140 var_formatted="140"
var=762 var_formatted="14 "
注意:此解决方案和Richard的解决方案都会将尾随空格添加到格式化值中,正如您从引号中所看到的。在此,我建议对user667489的解决方案稍作修改,以便:
- 无需每次使用格式时都指定格式的长度(定义格式时使用
语句的value
选项)default
- 生成的格式化值没有尾随空格(对应用格式生成的输出使用
函数)trim()
var=001 var_formatted="77"
var=140 var_formatted="140"
var=762 var_formatted="14"
在这里,我建议对user667489的解决方案稍作修改,以便:
- 无需每次使用格式时都指定格式的长度(定义格式时使用
语句的value
选项)default
- 生成的格式化值没有尾随空格(对应用格式生成的输出使用
函数)trim()
var=001 var_formatted="77"
var=140 var_formatted="140"
var=762 var_formatted="14"
格式具有默认宽度。如果使用该格式时未指定宽度,则SAS将使用默认宽度。制作用户定义格式时,PROC format将默认宽度设置为格式化值的最大宽度。在您的示例中,默认宽度设置为2 您可以在使用该格式时覆盖它
MDC = put(DRG_code, $MDC3.)
value $MDC (default=3)
'001' = '77'
'002' = '77'
...
'762' = '14'
;
也可以在定义格式时定义默认值
MDC = put(DRG_code, $MDC3.)
value $MDC (default=3)
'001' = '77'
'002' = '77'
...
'762' = '14'
;
您还可以使用other
关键字为不匹配的值设置默认值
value $MDC (default=3)
'001' = '77'
'002' = '77'
...
'762' = '14'
other = 'UNK'
;
您甚至可以为不匹配的值(或任何目标格式)嵌套对另一种格式的调用。在这种情况下,您不需要指定默认宽度,因为在定义默认宽度时将使用嵌套格式上的宽度
value $MDC
'001' = '77'
'002' = '77'
...
'762' = '14'
other = [$3.]
;
格式具有默认宽度。如果使用该格式时未指定宽度,则SAS将使用默认宽度。制作用户定义格式时,PROC format将默认宽度设置为格式化值的最大宽度。在您的示例中,默认宽度设置为2 您可以在使用该格式时覆盖它
MDC = put(DRG_code, $MDC3.)
value $MDC (default=3)
'001' = '77'
'002' = '77'
...
'762' = '14'
;
也可以在定义格式时定义默认值
MDC = put(DRG_code, $MDC3.)
value $MDC (default=3)
'001' = '77'
'002' = '77'
...
'762' = '14'
;
您还可以使用other
关键字为不匹配的值设置默认值
value $MDC (default=3)
'001' = '77'
'002' = '77'
...
'762' = '14'
other = 'UNK'
;
您甚至可以为不匹配的值(或任何目标格式)嵌套对另一种格式的调用。在这种情况下,您不需要指定默认宽度,因为在定义默认宽度时将使用嵌套格式上的宽度
value $MDC
'001' = '77'
'002' = '77'
...
'762' = '14'
other = [$3.]
;
当原始值不在列表中时,是否需要它们?或者,你想把这些值转换成一些常数文本吗?你可能想考虑明确地捕捉这些,但汤姆的解决方案中说明的另一个选项是你需要的。当它们不在列表中时,你想要原始值吗?或者,你想把这些值转换成一些不变的文本吗?你可能想考虑明确地捕捉到这些,但是在汤姆的解决方案中说明的另一个选项是你所需要的。