我目前有一个数据集,其中包含我需要的变量以及所需的格式。
现在我在循环中使用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()
?