从一行 SPSS 语法中提取字符串并转换为日期
Extract string from a line of SPSS syntax and convert to date
我的语法中的文件句柄引用了一个文件夹,其中包含 YYYYDDMM 格式的版本号。例如,下面引用的 "v20170215":
file handle WORKING/name='ROOT\Uploads141001_20150930 v20170215'.
文件句柄的版本部分会根据需要处理的新数据定期更新。文件句柄 总是 以 "v" 结尾,后跟 YYYYMMDD 日期。
如何从文件句柄中自动提取最后一个 "YYYYMMDD" 字符串(例如“20170215”)并从中创建一个日期变量?
如果日期是数据中的字符串变量,我可以使用如下内容:
* Extract data, month, and year.
compute day = number(char.substr(...),F2.0).
compute month = number(char.substr(...),F2.0).
compute year = number(char.substr(...),F4.0).
* Compute date variable.
compute Version = date.mdy(month,day,year).
formats Version (adate10).
execute.
但考虑到它是一行 语法 我需要解析,我想我应该看看 Python,但我不知道如何解决这个问题。
假设语法来自一个文件,您可以使用 Python 打开和处理该文件,您可以在空格处拆分该行,使用切片获取最后一个字段的日期部分,然后将其输入 datetime.strptime()
to parse the string into a datetime.date
对象。
>>> from datetime import datetime
>>> s = r"file handle WORKING/name='ROOT\Uploads141001_20150930 v20170215'."
>>> date_string = s.split()[-1][1:-2]
>>> datetime.strptime(date_string, '%Y%m%d').date()
datetime.date(2017, 2, 15)
我假设您无法从创建更新语法的同一来源获取更新参考作为数据(可能是更简单的解决方案)。
定义句柄后,您可以通过以下方式将该定义提取到数据中:
dataset declare myhandle.
oms/select tables/if commands=['Show'] subtypes=['File Handles']/destination format=SAV outfile='myhandle'.
show handles.
omsend.
dataset activate myhandle.
这将打开一个名为 myhandle
的数据集,其中变量 Directory
将包含句柄中定义的文件的完整路径。从中你只需要提取你需要的字符串 - 看看这是否适合你:
compute Directory=char.substr(Directory,char.index(Directory," v")+2,10).
现在您已经有了所需的字符串,您可以继续将其转换为日期并将其匹配到您的数据中。
我的语法中的文件句柄引用了一个文件夹,其中包含 YYYYDDMM 格式的版本号。例如,下面引用的 "v20170215":
file handle WORKING/name='ROOT\Uploads141001_20150930 v20170215'.
文件句柄的版本部分会根据需要处理的新数据定期更新。文件句柄 总是 以 "v" 结尾,后跟 YYYYMMDD 日期。
如何从文件句柄中自动提取最后一个 "YYYYMMDD" 字符串(例如“20170215”)并从中创建一个日期变量?
如果日期是数据中的字符串变量,我可以使用如下内容:
* Extract data, month, and year.
compute day = number(char.substr(...),F2.0).
compute month = number(char.substr(...),F2.0).
compute year = number(char.substr(...),F4.0).
* Compute date variable.
compute Version = date.mdy(month,day,year).
formats Version (adate10).
execute.
但考虑到它是一行 语法 我需要解析,我想我应该看看 Python,但我不知道如何解决这个问题。
假设语法来自一个文件,您可以使用 Python 打开和处理该文件,您可以在空格处拆分该行,使用切片获取最后一个字段的日期部分,然后将其输入 datetime.strptime()
to parse the string into a datetime.date
对象。
>>> from datetime import datetime
>>> s = r"file handle WORKING/name='ROOT\Uploads141001_20150930 v20170215'."
>>> date_string = s.split()[-1][1:-2]
>>> datetime.strptime(date_string, '%Y%m%d').date()
datetime.date(2017, 2, 15)
我假设您无法从创建更新语法的同一来源获取更新参考作为数据(可能是更简单的解决方案)。
定义句柄后,您可以通过以下方式将该定义提取到数据中:
dataset declare myhandle.
oms/select tables/if commands=['Show'] subtypes=['File Handles']/destination format=SAV outfile='myhandle'.
show handles.
omsend.
dataset activate myhandle.
这将打开一个名为 myhandle
的数据集,其中变量 Directory
将包含句柄中定义的文件的完整路径。从中你只需要提取你需要的字符串 - 看看这是否适合你:
compute Directory=char.substr(Directory,char.index(Directory," v")+2,10).
现在您已经有了所需的字符串,您可以继续将其转换为日期并将其匹配到您的数据中。