将非标准日期格式转换为 SPSS 中的日期
Convert Nonstandard Date Formats to Dates in SPSS
我觉得自己是个白痴,因为我自己无法解决这个问题,但是经过数小时的徒劳努力,我意识到我确实需要一些帮助:
我将出生日期数据从 Excel 以这些格式导入 SPSS:
2004 *assume year of birth
12-Sep-14
它们作为字符串变量导入到 SPSS。当我尝试将变量类型更改为 Date 时,不幸的是它们消失了,这意味着我一直在尝试将其编码。在网上看到答案我相信答案看起来类似于:
COMPUTE year=number(SUBSTR(string(v1,F8),7,2),F2).
COMPUTE day=number(SUBSTR(string(v1,F8),5,2),F2).
COMPUTE month=number(SUBSTR(string(v1,F8),3,2),F2).
COMPUTE date=DATE.MDY(month,day,year).
FORMAT date(ADATE8).
LIST.
EXECUTE.
但是通过不同命令的语法手册,我无法弄清楚我需要更改什么才能获得我想要的结果。我得到了以下内容,但我显然遗漏了一些东西。
COMPUTE Year = NUMBER(SUBSTR(STRING(Date,F8),1,4),F2).
EXECUTE.
理论上它很简单,但它的语法是我碰壁的地方。请帮忙!
- 语法
STRING(Date,F8)
用于将数字转换为字符串,但 Date
已经是字符串,因此您应该去掉它。
- 你有两种不同的情况,你必须在每种情况下以不同的方式工作 - 我会使用
do if
。
试试这个:
do if char.index(Date,"-")=0.
COMPUTE Year = NUMBER(char.SUBSTR(Date,3,2),F2).
else.
COMPUTE Year = NUMBER(char.SUBSTR(Date,8,2),F2).
end if.
您可以继续 else
之后的月份和日期。
但另一种方法是更改四位数年份,以便可以在一个命令中将它们与完整日期一起读取。在以下语法中,我将四位数年份更改为该年的一月一日(您当然可以更改),然后以相同的格式读取所有日期:
string Date2 (a10).
compute Date2=Date.
* since I need to change the variable, I do it in a copy of the variable so
I don't lose my original data.
if char.index(Date2,"-")=0 Date2=concat("1-1-",char.SUBSTR(Date2,3,2)).
compute DateFull=number(Date2, DATE9).
formats DateFull (DATE9).
exe.
我不清楚那个年份行是否实际上是同一个变量的一部分,但如果只是转换日期-月份-年份格式的字符串日期值,您可以像这样使用 ALTER TYPE。
改变类型 v1(date(a9).
如果还有只有年份的行,您可以将它们转换为一个新变量,然后将两者合并。
我觉得自己是个白痴,因为我自己无法解决这个问题,但是经过数小时的徒劳努力,我意识到我确实需要一些帮助:
我将出生日期数据从 Excel 以这些格式导入 SPSS:
2004 *assume year of birth
12-Sep-14
它们作为字符串变量导入到 SPSS。当我尝试将变量类型更改为 Date 时,不幸的是它们消失了,这意味着我一直在尝试将其编码。在网上看到答案我相信答案看起来类似于:
COMPUTE year=number(SUBSTR(string(v1,F8),7,2),F2).
COMPUTE day=number(SUBSTR(string(v1,F8),5,2),F2).
COMPUTE month=number(SUBSTR(string(v1,F8),3,2),F2).
COMPUTE date=DATE.MDY(month,day,year).
FORMAT date(ADATE8).
LIST.
EXECUTE.
但是通过不同命令的语法手册,我无法弄清楚我需要更改什么才能获得我想要的结果。我得到了以下内容,但我显然遗漏了一些东西。
COMPUTE Year = NUMBER(SUBSTR(STRING(Date,F8),1,4),F2).
EXECUTE.
理论上它很简单,但它的语法是我碰壁的地方。请帮忙!
- 语法
STRING(Date,F8)
用于将数字转换为字符串,但Date
已经是字符串,因此您应该去掉它。 - 你有两种不同的情况,你必须在每种情况下以不同的方式工作 - 我会使用
do if
。
试试这个:
do if char.index(Date,"-")=0.
COMPUTE Year = NUMBER(char.SUBSTR(Date,3,2),F2).
else.
COMPUTE Year = NUMBER(char.SUBSTR(Date,8,2),F2).
end if.
您可以继续 else
之后的月份和日期。
但另一种方法是更改四位数年份,以便可以在一个命令中将它们与完整日期一起读取。在以下语法中,我将四位数年份更改为该年的一月一日(您当然可以更改),然后以相同的格式读取所有日期:
string Date2 (a10).
compute Date2=Date.
* since I need to change the variable, I do it in a copy of the variable so
I don't lose my original data.
if char.index(Date2,"-")=0 Date2=concat("1-1-",char.SUBSTR(Date2,3,2)).
compute DateFull=number(Date2, DATE9).
formats DateFull (DATE9).
exe.
我不清楚那个年份行是否实际上是同一个变量的一部分,但如果只是转换日期-月份-年份格式的字符串日期值,您可以像这样使用 ALTER TYPE。
改变类型 v1(date(a9).
如果还有只有年份的行,您可以将它们转换为一个新变量,然后将两者合并。