【发布时间】:2011-08-18 14:18:48
【问题描述】:
我目前有一个数据集,其中包含我需要的变量以及所需的格式。
现在我在循环中使用getvarc() 函数(以及其他函数)将这些变量写入文件。
当然,第一个问题是有些变量不是char类型而是num类型。我可以使用getvarn() 来检索那些,但是我真正需要的格式就浪费了。
例如num 类型的日期:18750。格式 = yymmdd10。因此看起来像 2011-05-03
对该字段使用value=getvarn(),它将检索18750 的值。如果我想输出(使用 PUT)这个值,它不会像我想要的那样给我2011-05-03 日期。
所以现在我正在寻找一种更好的方法来做到这一点。
我的第一个选择是使用 sashelp.vcolumn 数据集,检索该字段的格式,并在 put 语句中使用它以正确的格式输出。
我的第二个选择是转换包含该字段的数据集(实际上它是关于多个数据集),我将所有 num 类型字段转换为 char 类型,保留正确的格式。
我应该选择哪个选项?
如果是第二种选择,这可以以通用方式完成吗(正如我所说,这不仅仅是一个变量)?
编辑:
在 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 而不需要类型的方式读取所有数据的方式-check 和getfmt()?
【问题讨论】: