【问题标题】:How to display date as DD MMM YYYY imported from .csv如何将日期显示为从 .csv 导入的 DD MMM YYYY
【发布时间】:2017-04-05 18:56:00
【问题描述】:

我有一项服务可以获取 .csv 并将其处理为 .sas7bdat。

我通过填写变量名称、长度和指定输出位置来修改现有的 .sas 模板。

我有一个场景,其中我的 .csv 的日期格式为“DD MMM YYYY”。我需要将此格式保留到输出文件中。预定义格式允许使用“DDMMMYYY”和“DD-MMM-YYYY”。我已经在模板中尝试过这些格式类型。

下面是标准字符类型的模板:

LIBNAME TempSrc "C:\Temp";
proc import datafile="\\***\FileLocation\file.csv"
        out=mydata dbms=dlm replace;
        DELIMITER= ",";
        getnames=yes;
        options ExtendObsCounter=yes;
RUN;
DATA TempSrc.fileName;
    attrib      DATEVAR length=$11  format=$11.     informat=$11.       label='Date'
            ;
            set work.mydata;
RUN;

如何修改此代码以输出如下日期“2000 年 1 月 1 日”

编辑:

如何将此值作为字符值输出到 .sas7bdat?

【问题讨论】:

  • 所以您的 input CSV 有 '01 JAN 2000' 并且您希望 output 数据集也包含 '01 JAN 2000'?您现有的代码已经通过将值作为字符变量读取来执行此操作。那么..实际问题是什么?您是否要将其转换为实际日期值(因此,数字)但将其格式化为显示“DD MMM YYYY”?
  • 如果我将长度保留为字符,我会收到错误“错误:变量 DATEVAR 已被定义为字符和数字。”

标签: date csv sas


【解决方案1】:

没有显示为 DD MMM YYYY 的默认格式,因此您需要自行选择。我相信以下内容为您提供了您想要实现的目标:

proc format;
picture ddmmmyy
  other= '%0d %b %Y' (datatype=date);
run;

data have;
  datevar='01 JAN 2000';
run;

data want;
  set have;
  actualdatevar=input(datevar,anydtdte11.);
  format actualdatevar ddmmmyy11.;
run;

给予:

请注意,您不能将字符变量转换为数字,因此您可能希望创建一个新变量,然后删除旧变量(也可以重命名新变量,以便最终得到相同的命名变量)。

EDIT1:适用于特定答案(现在情况更清楚了)

以下应该实现所需要的:

LIBNAME TempSrc "C:\Temp";

proc format;
picture ddmmmyy
  other= '%0d %b %Y' (datatype=date);
run;

proc import datafile="\\***\FileLocation\file.csv"
        out=mydata dbms=dlm replace;
        DELIMITER= ",";
        getnames=yes;
        options ExtendObsCounter=yes;
RUN;
/* if all you need to do is apply the format, you may be better using proc datasets */
DATA TempSrc.fileName;  
  set work.mydata;  
  format DATEVAR ddmmmyy11. ;
RUN;

EDIT2:转换为字符,以便在通用查看器中正确显示(没有自定义格式)

LIBNAME TempSrc "C:\Temp";

proc format;
picture ddmmmyy
  other= '%0d %b %Y' (datatype=date);
run;

proc import datafile="\\***\FileLocation\file.csv"
        out=mydata dbms=dlm replace;
        DELIMITER= ",";
        getnames=yes;
        options ExtendObsCounter=yes;
RUN;
/* convert numeric to character via rename */
DATA TempSrc.fileName;  
  set work.mydata (rename=(DATEVAR=DATEVAR2));  
  DATEVAR=put(DATEVAR2,ddmmmyy11.);
  drop DATEVAR2;
RUN;

【讨论】:

  • 这不起作用。输出文件显示未格式化的日期值。我在 proc 导入之后和数据步骤之前插入了 proc 格式。然后将 DATEVAR 更改为 format=ddmmmyy11。
  • 嗨,Dan - 我必须创建一个可重现的示例来演示格式和解释概念。据我所知,您的输入变量是 NUMERIC ,因此您需要的只是 proc 格式(请注意,只需要在 before 数据步骤之前,相对于 proc 导入的位置确实没关系)。你的问题现在解决了吗?我的回答有帮助吗?
  • 当 .sas7bdat 在生成它的 SAS 工具之外查看时,这似乎不起作用。因此,当我在通用查看器中打开它时,ddmmmyy11 格式会丢失。
  • 如果这是您的要求,那么我建议将其转换为字符变量
猜你喜欢
  • 1970-01-01
  • 2019-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
  • 2021-07-09
  • 1970-01-01
相关资源
最近更新 更多