当前位置: 首页 > 知识库问答 >
问题:

将csv导入SAS时无法正确设置日期格式

壤驷英叡
2023-03-14

我正在将一个csv文件导入SAS,其中包含一个使用类似于worddatxw的word日期格式的字段。但对于日期后的字母(例如,1而不是1):

Week_of_the_promotion
1st April 2013
1st April 2013
3rd April 2013
3rd April 2013
5th April 2013

我已经走了这么远:

data work.leafletdata;
    infile "C:\rawdata.csv" 
    delimiter = ',' MISSOVER DSD lrecl=32767 firstobs=2;
    informat
        Week_of_the_promotion *weird informat?* Barcode $20. 
                StartDate mmddyy10.   EndDate mmddyy10. ;
    format
        Week_of_the_promotion *preferably date9.* Barcode $20. 
        StartDate date9.      EndDate   date9.  ;
    input 
        Week_of_the_promotion $  Barcode $  
                StartDate $              EndDate $  ;
run;

我无法确定如何使用proc import将其导入SAS,同时在SAS内将其转换为可用日期。

我是SAS初学者,所以请使用外行术语。谢谢!:)

共有1个答案

陈君之
2023-03-14

这是一种可能的解决方案-将其分解为“1”“2013年4月”,然后从“2013年4月”开始构建一个日期,最后使用“1”和intnx函数提前该周数。您可能需要根据您对“四月第一周”的定义,将呼叫调整为intnx(例如,在3月31日开始的示例中,如果您的公司将其定义为从4月7日到4月13日的一周,这是不同的,并且如果您需要从一周中不同的一天开始的一周,这也是一种调整,请查看文档以了解更多信息)。

data have;
infile datalines truncover;
input @1 week_of_the_promotion $25.;
datalines;
1st April 2013 
1st April 2013 
3rd April 2013 
3rd April 2013 
5th April 2013
;;;;
run;

data want;
set have;
weeknum = compress(scan(week_of_the_promotion,1),,'kd');  *Note 1;
for_date = '01'||substr(scan(week_of_the_promotion,2),1,3)||
  scan(week_of_the_promotion,3);  *Note 2;
actual_date = intnx('week',input(for_date,date9.),weeknum-1,'b'); *Note 3;
format actual_date date9.;
put week_of_the_promotion= actual_date=;
run;
  1. Scan在缺省情况下用分隔符将字符串分隔成单词,并返回您要求的单词(1,这里)。Compress删除/保留特定类型的字符;这里我用它来保留数字。因此,扫描返回第一,然后我告诉它只保留数字,所以1。
  2. 这里我们使用扫描两次,得到"April"和"2013"。April使用substr被剪切在前3个字符“Apr”上,因为这是SAS日期最容易读取的方式。然后我们将年份追加到年底,将01追加到开始(在...)。这最终是01APR2013,然后使用日期格式输入数字(DDMONYYYY是SAS的默认日期格式)。
  3. 我们在这里使用intnx,它将日期提前一定数量的日期间隔。我们使用"周"来提前一定的周数,并提前存储在"周"(从注释1)中的数字减去1(因为周1=提前0周,周2=提前1周,等等)b是一周的开始(相对于结束、中间或相同)。“周”是从周日开始的默认周;第二周将把前两天移到周二开始的周,等等。
 类似资料:
  • 问题内容: 我正在将第一个CSV导入MySQL,并注意到CSV中的日期具有格式。如何将其转换为DATE数据类型?首先想到的是让PHP进行转换,然后将其插入第二个表中,但我想那是不对的。 问题答案: 您可以在从CSV文件导入数据的过程中替换格式,例如- 它将像“ 31-Jan-2011”这样的字符串格式化为正确的DATETIME数据类型。 这里的更多信息-LOAD DATA INFILE语法。

  • 我想得到输入部分中每个变量使用的格式列表。例如,我们有一个csv文件,并手动将数据导入SAS。在代码部分,我们将有如下smth: 我想知道输入部分使用的是什么格式,即:BEST1。只需9美元。对于B,MMDDYY9。对于C等。 我已经找到了总结SASHELP. CARS数据集中每个变量的格式和格式的代码,但是我找不到INPUT部分使用的格式。有人知道在哪里能找到吗?有时(对于数值变量),这些格式可

  • 我看到摄入的日期时间格式是:,但我没有在网站上看到任何可以做到这一点的东西。 https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html 我的最终状态是通过@timestamp索引,我想通过这个字段进行索引:tmpstmp 我还注意到,如果我将tmpstmp设置为type Date

  • 我有以下代码来解析和格式化日期: 其输出如下所示: 为什么PM打印机和AM一样?

  • 我的程序(C#.NET4.5)必须能够生成一些可以加载到Excel中的报告。我选择将报表导出为。csv格式,因为这是导出为excel理解的格式的最简单的方法。并且它不要求Excel安装在运行我的程序的机器上。 我的问题是导出日期。

  • 问题内容: 我已经看到JSON日期格式的许多不同标准: 哪一个是正确的?还是最好的?有什么标准吗? 问题答案: JSON本身 没有 指定日期应如何表示,但JavaScript却指定了。 您 应该 使用的方法发出的格式: 原因如下: 它是人类可读的,但也很简洁 排序正确 它包括小数秒,可以帮助重新建立时间顺序 符合ISO 8601 ISO 8601已经在国际上建立了十多年的历史 W3C,RFC333