【问题标题】:SAS dataset fieldtype num to char with current formatSAS 数据集字段类型 num 到当前格式的 char
【发布时间】: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()?

【问题讨论】:

    标签: dataset format sas


    【解决方案1】:

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

    【讨论】:

    • 感谢您提供其他问题的链接。奇怪的是,我在搜索类似问题时没有找到那个。但我认为vvalue 函数对我不起作用,因为它需要变量名作为参数,而我使用getvarc() 函数从另一个表中检索参数值。我现在正在尝试varfmt(),但是我仍然需要找到一种方法来区分 char 类型和 num 类型...
    • 好的,除了之前的评论。我现在尝试使用 varfmt()。我还需要 vartype() 来选择类型,然后根据 vartype 使用 getvarc 或 getvarn,最后使用 putn 和 putc 再次将其放入变量中。它有效,但我仍然想知道提前这样做是否会更好(就像我的第二个选项一样)。
    • @Yohsoog - 从问题来看,您似乎只是想将数据集转换为文本文件,同时保留格式。我现在不确定我是否完全理解你想要做什么。也许如果你提供一个小例子——连同预期的结果——我们可以想出一些更有用的东西。
    • 我刚刚编辑了我的问题以反映这些变化。通过这样做,我注意到我的问题确实不是很强烈。我现在试着改写一下,但如果还是不清楚,我会接受你的回答,并尝试为效率部分再开一个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多