如何从导入的 CSV 中转换日期格式以便能够合并数据
How to convert date format from imported CSV to be able to merge data
我正在做作业,不允许使用 PROC SQL。我同时从两个 csv 文件导入数据并重命名列(参见下面的代码),但是当我尝试 PROC APPEND 这两个 table 时,日期格式存在问题。当我处理内容时,我得到以下信息:
Work.2019data:
Variable:date
Type:Num
Length:8
Format/Informat:MMDDYY10
When I open this file in notepad, the dates appears like this: 12/31/2019
第二个table:
Work.2020data:
Variable:date
Type:Num
Length:8
Format/Informat:YYMMDD10
But when I open this file in notepad, the dates appears like this: 2020-11-16
PROC IMPORT
DATAFILE= "&export_mtl/2019data.csv"
OUT= WORK.2019data
(RENAME=(new_cases=nouveaux_cas
new_deaths=nouveaux_deces
new_tests=nouveaux_tests
total_tests=nb_total_tests
female_smokers=femmes_fumeuses
male_smokers=hommes_fumeurs
))
DBMS= csv
REPLACE;guessingrows=10000;
GETNAMES= YES;
RUN;
PROC IMPORT
DATAFILE= "&export_mtl/2020data.csv"
OUT= WORK.2020data
(RENAME=(new_cases=nouveaux_cas
new_deaths=nouveaux_deces
new_tests=nouveaux_tests
total_tests=nb_total_tests
female_smokers=femmes_fumeuses
male_smokers=hommes_fumeurs
))
DBMS= csv
REPLACE;guessingrows=10000;
GETNAMES= YES;
RUN;
在 2020 数据 table 中投射日期以便我可以在之后连接两个 table 的最简单方法是什么?我见过很多这样做的方法,但都没有成功。
如果您只想堆叠两个文件,您可以使用数据步骤。它将完成任务,将与第一个数据集相同的格式分配给第二个数据集:
data data_2019_2020;
set 2019data 2020data;
run;
如果你想改变日期的格式,你也可以用一个datastep来完成。例如:
data data_2019_2020;
set 2019data 2020data;
FORMAT date YYMMDD10.;
run;
或者,如果您愿意,您可以先在一个数据集中进行更改,然后使用 PROC APPEND
进行堆叠。
如果您合并两个具有相同变量的数据集,则附加到变量的默认格式将是数据步骤编译器看到的第一个非缺失格式。所以对于你的例子,如果你 运行
data want;
set '2019data'n '2020data'n ;
run;
然后是 MMDDYY10。格式将被使用。但是如果你颠倒输入数据集被引用的顺序
data want;
set '2020data'n '2019data'n ;
run;
然后是 YYMMDD10。将使用格式。
但是,如果您将 FORMAT 语句添加到数据步骤,则您可以控制新数据集中附加的格式。所以如果你使用:
data want;
set '2020data'n '2019data'n ;
format date date9.;
run;
现在,用于在 WANT 中显示 DATE 值的默认样式将为 ddMONyyyy。
我正在做作业,不允许使用 PROC SQL。我同时从两个 csv 文件导入数据并重命名列(参见下面的代码),但是当我尝试 PROC APPEND 这两个 table 时,日期格式存在问题。当我处理内容时,我得到以下信息:
Work.2019data: Variable:date Type:Num Length:8 Format/Informat:MMDDYY10 When I open this file in notepad, the dates appears like this: 12/31/2019
第二个table:
Work.2020data: Variable:date Type:Num Length:8 Format/Informat:YYMMDD10 But when I open this file in notepad, the dates appears like this: 2020-11-16
PROC IMPORT
DATAFILE= "&export_mtl/2019data.csv"
OUT= WORK.2019data
(RENAME=(new_cases=nouveaux_cas
new_deaths=nouveaux_deces
new_tests=nouveaux_tests
total_tests=nb_total_tests
female_smokers=femmes_fumeuses
male_smokers=hommes_fumeurs
))
DBMS= csv
REPLACE;guessingrows=10000;
GETNAMES= YES;
RUN;
PROC IMPORT
DATAFILE= "&export_mtl/2020data.csv"
OUT= WORK.2020data
(RENAME=(new_cases=nouveaux_cas
new_deaths=nouveaux_deces
new_tests=nouveaux_tests
total_tests=nb_total_tests
female_smokers=femmes_fumeuses
male_smokers=hommes_fumeurs
))
DBMS= csv
REPLACE;guessingrows=10000;
GETNAMES= YES;
RUN;
在 2020 数据 table 中投射日期以便我可以在之后连接两个 table 的最简单方法是什么?我见过很多这样做的方法,但都没有成功。
如果您只想堆叠两个文件,您可以使用数据步骤。它将完成任务,将与第一个数据集相同的格式分配给第二个数据集:
data data_2019_2020;
set 2019data 2020data;
run;
如果你想改变日期的格式,你也可以用一个datastep来完成。例如:
data data_2019_2020;
set 2019data 2020data;
FORMAT date YYMMDD10.;
run;
或者,如果您愿意,您可以先在一个数据集中进行更改,然后使用 PROC APPEND
进行堆叠。
如果您合并两个具有相同变量的数据集,则附加到变量的默认格式将是数据步骤编译器看到的第一个非缺失格式。所以对于你的例子,如果你 运行
data want;
set '2019data'n '2020data'n ;
run;
然后是 MMDDYY10。格式将被使用。但是如果你颠倒输入数据集被引用的顺序
data want;
set '2020data'n '2019data'n ;
run;
然后是 YYMMDD10。将使用格式。
但是,如果您将 FORMAT 语句添加到数据步骤,则您可以控制新数据集中附加的格式。所以如果你使用:
data want;
set '2020data'n '2019data'n ;
format date date9.;
run;
现在,用于在 WANT 中显示 DATE 值的默认样式将为 ddMONyyyy。