Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/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_Format_User Defined - Fatal编程技术网

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

在SAS例如,我有一个用户定义的格式

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()
    函数)
i、 e

这将提供以下输出:

var=001 var_formatted="77"
var=140 var_formatted="140"
var=762 var_formatted="14"

在这里,我建议对user667489的解决方案稍作修改,以便:

  • 无需每次使用格式时都指定格式的长度(定义格式时使用
    value
    语句的
    default
    选项)
  • 生成的格式化值没有尾随空格(对应用格式生成的输出使用
    trim()
    函数)
i、 e

这将提供以下输出:

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.]
;

当原始值不在列表中时,是否需要它们?或者,你想把这些值转换成一些常数文本吗?你可能想考虑明确地捕捉这些,但汤姆的解决方案中说明的另一个选项是你需要的。当它们不在列表中时,你想要原始值吗?或者,你想把这些值转换成一些不变的文本吗?你可能想考虑明确地捕捉到这些,但是在汤姆的解决方案中说明的另一个选项是你所需要的。