SAS:使用用户定义的格式时,如果不匹配,"default value" 是未格式化的输入变量吗?
SAS: When using user defined formats, if there's not a match, "default value" is the unformatted input variable?
在 SAS EG 中,我有一个用户定义的格式
value $MDC
'001' = '77'
'002' = '77
...
'762' = '14'
etc.
我的数据集有 DRG_code 个字符串变量,其值类似于“001”和“140”。
我试图用下面的代码创建一个新变量。
MDC = put(DRG_code, $MDC.)
只有我的数据集中变量DRG_code的值比较多,然后在用户定义的格式文件中指定,$MDC.
例如,当数据集 DRG_Code 等于 '140' 时,此值在用户定义格式中不存在,并且由于某种原因,put 语句是 returning MDC = '14 '(这应该只是它的值与 DRUG 代码是 '762')。
有没有办法确保我的 put 语句只有 return存在相应值时来自用户定义格式的值?
感谢您的反馈。
萝莉
我试过使用像 "length" 这样的格式来让我的 put 语句 return 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'
您也可以通过在应用格式时指定要使用的长度来解决此问题,例如
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 "
N.B。这个解决方案和 Richard 的解决方案都会导致尾随空格被添加到格式化值中,正如您从引号中看到的那样。
这里我建议对user667489的解决方案稍作修改,以便:
- 不需要每次使用都指定格式的长度(定义格式时使用
value
语句的default
选项)
- 生成的格式化值没有尾随空格(在应用格式产生的输出上使用
trim()
函数)
即
proc format;
value $MDC(default=3)
'001' = '77'
'002' = '77'
'762' = '14'
;
run;
data _null_;
do var = '001', '140', '762';
var_formatted = quote(trim(put(var, $MDC.)));
put var= var_formatted=;
end;
run;
给出以下输出:
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'
;
您还可以使用 other
关键字为不匹配的值设置默认值。
value $MDC (default=3)
'001' = '77'
'002' = '77'
...
'762' = '14'
other = 'UNK'
;
您甚至可以为不匹配的值(或任何目标格式)嵌套对另一种格式的调用。在这种情况下,您不需要指定默认宽度,因为在定义默认宽度时将使用嵌套格式的宽度。
value $MDC
'001' = '77'
'002' = '77'
...
'762' = '14'
other = [.]
;
在 SAS EG 中,我有一个用户定义的格式
value $MDC
'001' = '77'
'002' = '77
...
'762' = '14'
etc.
我的数据集有 DRG_code 个字符串变量,其值类似于“001”和“140”。
我试图用下面的代码创建一个新变量。
MDC = put(DRG_code, $MDC.)
只有我的数据集中变量DRG_code的值比较多,然后在用户定义的格式文件中指定,$MDC.
例如,当数据集 DRG_Code 等于 '140' 时,此值在用户定义格式中不存在,并且由于某种原因,put 语句是 returning MDC = '14 '(这应该只是它的值与 DRUG 代码是 '762')。
有没有办法确保我的 put 语句只有 return存在相应值时来自用户定义格式的值?
感谢您的反馈。
萝莉
我试过使用像 "length" 这样的格式来让我的 put 语句 return 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'
您也可以通过在应用格式时指定要使用的长度来解决此问题,例如
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 "
N.B。这个解决方案和 Richard 的解决方案都会导致尾随空格被添加到格式化值中,正如您从引号中看到的那样。
这里我建议对user667489的解决方案稍作修改,以便:
- 不需要每次使用都指定格式的长度(定义格式时使用
value
语句的default
选项) - 生成的格式化值没有尾随空格(在应用格式产生的输出上使用
trim()
函数)
即
proc format;
value $MDC(default=3)
'001' = '77'
'002' = '77'
'762' = '14'
;
run;
data _null_;
do var = '001', '140', '762';
var_formatted = quote(trim(put(var, $MDC.)));
put var= var_formatted=;
end;
run;
给出以下输出:
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'
;
您还可以使用 other
关键字为不匹配的值设置默认值。
value $MDC (default=3)
'001' = '77'
'002' = '77'
...
'762' = '14'
other = 'UNK'
;
您甚至可以为不匹配的值(或任何目标格式)嵌套对另一种格式的调用。在这种情况下,您不需要指定默认宽度,因为在定义默认宽度时将使用嵌套格式的宽度。
value $MDC
'001' = '77'
'002' = '77'
...
'762' = '14'
other = [.]
;