我觉得自己不能解决这个问题,我觉得自己像个白痴,但几个小时徒劳的努力我意识到我真的需要一些帮助:
我有以下格式的出生日期数据从 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.
从理论上讲,这很容易,但它的语法是我碰壁的地方。请帮忙!
我不清楚该年份行是否实际上是同一变量的一部分,但要仅以日-月-年格式转换字符串日期值,您可以使用这样的 ALTER TYPE。
更改类型 v1(日期 (a9)。
如果还有仅限年份的行,则可以将它们转换为新变量,然后将两者合并。
- 语法
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
后的月份和日期。
但另一种方法是更改四位数的年份,以便可以在一个命令中将它们与完整日期一起阅读。在下面的语法中,我将四位数的年份更改为该年的 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.