SAS数据集字段类型num为char,具有当前格式

时间:2011-05-04 14:19:12

标签: dataset format sas

我目前有一个数据集,其中包含我需要的变量以及所需的格式。

现在我在循环中使用getvarc()函数(以及其他函数)来获取这些变量以写入文件。
发生的第一个问题是,某些变量不是char类型而是num类型。我可以使用getvarn()来检索这些,但随后格式化为我真正需要的浪费。

E.g。日期在num类型:18750。格式= yymmdd10。因此看起来像2011-05-03

对此字段使用value=getvarn(),它会检索18750的值。如果我想输出(使用PUT)这个值,它就不会给我2011-05-03日期。

所以现在我正在寻找一种更好的方法来做到这一点 我的第一个选择是使用sashelp.vcolumn数据集来检索此字段的格式,并在put语句中使用它以正确的格式输出。
我的第二个选择是转换包含该字段的数据集(实际上它是关于多个数据集),其中我将所有num类型字段转换为保留正确格式的字符类型。

我应该选择哪个选项?
在第二种选择的情况下,这可以通用的方式完成(正如我所说,这不仅仅是一个变量)?

修改

在Cmjohn回答之后,我找到了解决问题的方法。不使用sashelp.vcolumn但使用varfmt函数。 所以我在代码中做了一些简短的解释:

  data _null_
  set dataset1;
  file file1;
  if somefield = x then do;
    dsid = open(datasetfield, i);
    rc = fetchobs (dsid);
    varnum = varnum(dsid,anotherfield);
    **varfmt = varfmt(dsid,anotherfield);
    if vartype(dsid,anotherfield) = 'N' then do;**
      value = getvarn(dsid,varnum);
      **value_formatted = putn(value,varfmt);**
    **end;
    else do;**
      value = getvarc(dsid,varnum);
      **value_formatted = putc(value,varfmt);
    end;**
    put value_formatted;
  end;
  run;

所以这一般(我很快就会忘记)我现在在做什么。解决方案的大胆部分是我在Cmjohns响应之后提出的。所以我的第一个问题得到回答,'怎么做?'。

但是我提出的问题是:从长远来看效率最高的是:保持这个过程或者让我的数据设置方式只需使用getvarc就可以读取所有数据而无需类型检查和getfmt()

1 个答案:

答案 0 :(得分:2)

我建议您使用vvalue函数或this question答案中提供的任何其他技术将格式化的值放入文件中。