Date 如何将从.csv导入的日期显示为DD MMM YYYY

Date 如何将从.csv导入的日期显示为DD MMM YYYY,date,csv,sas,Date,Csv,Sas,我有一个服务,它获取.csv并将其处理为.sas7bdat 我通过填写变量名、长度和指定输出位置来修改现有的.sas模板 我有一个场景,其中我的.csv的日期格式为“DD-MMM-YYYY”。我需要将此格式保留到输出文件中。预定义格式允许使用“DDMMMYYY”和“DD-MMM-yyy”。我在模板中尝试了这些格式类型 以下是标准字符类型的模板: LIBNAME TempSrc "C:\Temp"; proc import datafile="\\***\FileLocation\file.csv

我有一个服务,它获取.csv并将其处理为.sas7bdat

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

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

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

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?

没有显示为DD-MMM-yyy的默认格式,因此需要自己滚动。我相信以下内容将为您提供您想要实现的目标:

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;
给出:

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

编辑1:适用于具体答案(现在情况更清楚了)

应实现以下目标:

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:转换为字符,以便在universal viewer中正确显示(无自定义格式)


那么您的输入CSV包含“01 JAN 2000”,您希望输出数据集也包含“01 JAN 2000”?现有代码已经通过将中的值作为字符变量读取来实现这一点。所以实际问题是什么?是否要将其转换为实际日期值(因此,数字),但将其格式化为显示“DD-MMM-YYYY”?如果将长度保留为字符,则会出现错误“错误:变量DATEVAR已定义为字符和数字”。这不起作用。输出文件显示未格式化的日值。我在proc导入之后和数据步骤之前插入了proc格式。然后将DATEVAR更改为format=ddmmmyy11.Hi Dan-我必须创建一个可复制的示例来演示格式并解释概念。正如我现在所理解的,您的输入变量是数字的,因此您所需要的只是proc格式(请注意,在数据步骤之前只需要有这个,相对于proc导入的位置并不重要)。你的问题现在解决了吗?我的回答有用吗?当在生成.sas7bdat的SAS工具之外查看它时,这似乎不起作用。因此,当我在通用查看器中打开它时,ddmmmyy11格式将丢失。如果这是您的要求,那么我建议将其转换为字符变量
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;