在SPSS中将非标准日期格式转换为日期

时间:2017-07-15 18:09:13

标签: database spss data-cleaning

我觉得自己是一个白痴,因为我无法自己解决这个问题,但是几个小时无用的努力让我意识到我真的需要一些帮助:

我将从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.

从理论上说它很容易,但它的语法就是我撞墙的地方。请帮忙!

2 个答案:

答案 0 :(得分:0)

  1. 语法STRING(Date,F8)用于将数字转换为字符串,但Date已经是字符串,所以你应该摆脱它。
  2. 您有两种不同的情况,每种情况都必须采用不同的方式 - 我会使用do if
  3. 试试这个:

    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之后的月份和日期。

    但另一种方法是更改​​四位数年份,以便在一个命令中可以读取完整日期。在以下语法中,我将四位数年份更改为当年的1月1日(当然可以更改),然后以相同的格式阅读所有日期:

    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.
    

答案 1 :(得分:0)

我不清楚年份行是否实际上是同一个变量的一部分,但只是以日 - 月 - 年格式转换字符串日期值,您可以像这样使用ALTER TYPE。

改变类型v1(日期(a9)。

如果还有仅年级行,您可以将它们转换为新变量,然后将两者结合起来。