2017-07-15 96 views
1

我觉得不能够算出这个对我自己是个白痴,但徒劳的时间我才意识到我真的需要一些帮助:转换非标准日期格式,以2012年新SPSS

我的出生日期从Excel导入SPSS中的数据格式如下:

2004 *assume year of birth 
12-Sep-14 

它们作为字符串变量导入SPSS。当我试图改变变量类型,日期,他们消失遗憾的是这意味着我一直在试图将其代码即将跨越的答案在网上我相信答案将类似于此:

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. 

从理论上讲,这很容易,但它的语法是我打墙的地方。请帮忙!

回答

0
  1. 语法STRING(Date,F8)用于打开一个数字,一个字符串,但Date已经是一个字符串,所以你应该摆脱的那个。
  2. 你有两种不同的情况,你必须在每一种情况下工作不同 - 我会用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. 
0

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

ALTER型V1(日期(A9)。

如果有也只有一年,行,你可以将它们转换成一个新的变量,然后将二者结合起来。