很多都用SPSS100 不知道你用的什么版本的, 而且网上都有教程的,你可以下下来看看
你没说什么具体的出来,怎么帮你啊
我现在也在做论文。。 马上毕业了
INTNX 函数
按指定间隔递增日期、时间或日期时间值,并返回日期、时间或日期时间值
语法
INTNX(interval<multiple><shift-index>, start-from, increment<,alignment>)
参数
interval
指定包含时间间隔的字符型常数、变量或表达式,例如 WEEK、SEMIYEAR、QTR 或 HOUR。
要求:interval 的类型(日期、日期时间或时间)必须与 start-from 和 increment 中的值类型匹配。
multiple
指定间隔的倍数。它将间隔设置为间隔类型的倍数。例如,YEAR2 由两年期间组成。
请参见“Incrementing Dates and Times by Using Multipliers and by Shifting Intervals”
shift-index
指定间隔的开始点。默认情况下,开始点为 1。大于 1 的值会将开始点移位到间隔中靠后的点。移位的单位取决于间隔。例如,YEAR3 指定将每年期间移位到在每个日历年的三月一日开始,并且在下一年的二月结束。
限制:位移索引不能大于整个间隔中的期间数。例如,YEAR224 的位移索引有效,但是 YEAR225 无效,因为两年期间内没有第 25 个月。
限制:若默认位移期间与间隔类型相同,则您仅能使用位移索引位移多期间间隔。例如,因为 MONTH 类型间隔默认情况下按 MONTH 子期间进行移位,所以您不能使用位移索引对每月间隔进行移位。不过,您可以使用位移索引移动双月间隔,因为在每个 MONTH2 间隔中有两个 MONTH 间隔。例如,间隔名 MONTH22 指定从偶数月的第一天开始双月期间。
start-from
指定表示 SAS 日期、时间或日期时间值的 SAS 表达式,用以标识开始点。
increment
指定表示日期、时间或日期时间间隔数的负整数、正整数或零。increment 是将 start-from 值移动的间隔数。
alignment
控制间隔内 SAS 日期的位置。alignment 可以是以下值之一:
BEGINNING
指定将返回日期调整到间隔的开始点。别名:B
MIDDLE
指定将返回日期调整到间隔的中点。
别名:M
END
指定返回日期调整到间隔的结束点。
别名:E
SAMEDAY
指定将返回日期调整为与相应间隔增量相同的日历日期。
别名:S
别名:SAME
默认:BEGINNING
详细信息
基础 INTNX 函数按间隔(例如 DAY、WEEK、QTR 和 MINUTE)递增日期、时间或日期时间值。增量取决于开始日期、时间或日期时间值,以及您指定的时间间隔数。INTNX 函数返回您在 start-from 参数中指定的间隔的开始日期、时间或日期时间值。例如,要确定距离 2003 年 10 月 17 日所在周 6 周的那一周的开始日期,请使用以下示例:
intnx(‘week’, ‘17oct03’d, 6);
INTNX 返回值 23NOV2003。
通过使用乘数和移位间隔递增日期和时间 SAS 提供日期、时间和日期时间间隔来对不同的已用时间期间进行计数。通过使用乘数和位移索引,您可以创建间隔的倍数和移动其开始点以构造更复杂的间隔指定。
间隔名称的一般格式如下所示:
name<multiplier><shift-index>
乘数和位移索引是可选参数,默认值为 1。例如,YEAR、YEAR1、YEAR1 和 YEAR11 都可以指定始于 1 月的通常的日历年。若您为乘数和位移索引指定其他值,您可以创建始于该年内不同时期的多倍间隔。例如,间隔 WEEK611 指定始于第二个星期三的 6 周间隔。
了解时间间隔 在年或天内的间隔都以 SAS 日期或日期时间值 0 为基点调整。SAS 使用 1960 年 1 月 1 日午夜的任意参考时间都用作非移位间隔的原点,并相对于 1960 年 1 月 1 日定义移位后的间隔。
例如,MONTH13 定义间隔 1960 年 1 月 1 日、1961 年 2 月 1 日、1962 年 3 月 1 日等等。间隔 1958 年 12 月 1 日、1957 年 11 月 1 日、1956 年 10 月 1 日 等等都是在基本日期 1960 年 1 月 1 日之前的日期。
再举一例,间隔指定 WEEK613 定义始于第二个星期五的 6 周期间。相对于包含 1960 年 1 月 1 日的期间进行调整这一规则确定了开始计数的位置,以确定对应于 6 周间隔的第二个星期五的日期。
示例
以下示例展示如何使用 INTNX 函数。
SAS 语句 结果
yr=intnx(‘year’,’05feb94’d,3); 13515
put yr / yr date7; 01JAN97
x=intnx(‘month’,’05jan95’d,0); 12784
put x / x date7; 01JAN95
next=intnx(‘semiyear’,’Oljan97’d,1); 13696
put next / next date7; 01JUL97
past=intnx(‘month2’,’Olaug96’d,-1); 13270
put past / past date7; 01MAY96
sm=intnx(‘semimonth22’,’Olapr97’d,4); 13711
put sm / sm date7; 16JUL97
具体你可以用EG模块查询生成器 -添加新的计算列-高级表达式中就有这个时间函数
SAS化部署是指将一个或多个SAS解决方案或应用程序中的所有组件,如数据集、程序、图形和文档等,打包并部署到SAS基础架构中,使得可以在不同的环境中进行复制和使用。这个过程需要考虑安全性、可靠性、稳定性、可扩展性和易于管理等因素。
SAS化部署通常需要使用SAS Deployment Wizard或SAS Studio来完成。其中,SAS Deployment Wizard是一种自动化工具,可以帮助用户快速安装、配置和管理SAS软件系统。而SAS Studio则是一种基于Web的开发环境,可以帮助用户创建和管理SAS应用程序、开发和调试代码、以及发布和共享结果等。
通过SAS化部署,企业可以更好地管理和共享SAS应用程序和解决方案,避免了重复部署和配置的问题,提高了生产效率和质量,减少了管理和维护成本,使得SAS的应用更加简单、灵活和可扩展。
,Python 和 SAS 是两个很常用的数据挖掘工具。Python 开源、免费、有丰富的三方库,一般在互联网公司广泛使用。而SAS需付费,且费用较高,一般互联网公司无法承担,更多的是在银行等传统金融机构中使用,不过这两年由于Python太火,原本使用SAS的也开始逐渐转向Python了。
拥抱开源,越来越多的爱好者造出优秀的Python轮子,比如当下比较流行的万金油模型Xgboost、LightGBM,在各种竞赛的top级方案中均有被使用。而SAS的脚步就比较慢了,对于一些比较新的东西都无法直接提供,所以对于那些使用SAS的朋友,就很难受了。
一直以来很多粉丝问过东哥这个问题:有没有一种可以将Python模型转成SAS的工具?
因为我本身是两个技能都具备的,实际工作中一般都是配合使用,也很少想过进行转换。但是,最近东哥逛技术论坛刚好发现了一个骚 *** 作,借助Python的三方库m2cgen和Python脚本即可完成Python模型到SAS的转换。
m2cgen是什么?
m2cgen是一个Python的第三方库,主要功能就是将Python训练过的模型转换为其它语言,比如 R 和 VBA。遗憾的是,目前m2cgen尚不支持SAS,但这并不影响我们最终转换为SAS。
我们仍然使用m2cgen,需要借助它间接转换成SAS。具体的方案就是先将Python模型转换为VBA代码,然后再将VBA代码更改为 SAS脚本,曲线救国。
如何使用m2cgen?
我直接用一个例子说明下如何 *** 作。
数据我们使用sklearn自带的iris dataset,链接如下:
The Iris Dataset — scikit-learn 111 documentation
下面,演示一下如何将Python的XGBoost模型转成SAS代码。
首先导入所需的库包和数据。
# 导入库
import pandas as pd
import numpy as np
import os
import re
from sklearn import datasets
from xgboost import XGBClassifier
from sklearnmodel_selection import train_test_split
from sklearnmetrics import accuracy_score
import m2cgen as m2c
# 导入数据
iris = datasetsload_iris()
X = irisdata
Y = iristarget
登录后复制
然后,我们划分数据集,直接扔进XGBoost里面,建立base模型。
# 划分数据为训练集和测试集
seed = 2020
test_size = 03
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=test_size, random_state=seed)
# 训练数据
model = XGBClassifier()
modelfit(X_train, y_train)
登录后复制
然后,再将XGBoost模型转换为VBA。使用m2cgen的export_to_visual_basic方法就可以直接转成VBA了。转换成其他语言脚本也是同理,非常简单。
code = m2cexport_to_visual_basic(model, function_name = 'pred')
登录后复制
核心的骚 *** 作来了!
m2cgen不支持SAS,但我们可以把VBA代码稍加改动,就能变成符合SAS标准的代码了。而这个改动也无需手动一个个改,写一段Python脚本即可实现VBA脚本转换为SAS脚本。
改动的地方不多,主要包括:删除在SAS环境中不能使用的代码,像上面结果中的Module xxx,Function yyy ,Dim var Z As Double,还有在语句结尾加上;,这些为的就是遵循SAS的语法规则。
下面就是转换的Python脚本,可以自动执行上面所说的转换 *** 作。
# 1、移除SAS中不能使用的代码
code = resub('Dim var As Double', '', code)
code = resub('End If', '', code)
# 下面 *** 作将修改成符合SAS的代码
# 2、修改起始
code = resub('Module Model\nFunction pred(ByRef inputVector() As Double) As Double()\n',
'DATA pred_result;\nSET dataset_name;', code)
# 3、修改结尾
code = resub('End Function\nEnd Module\n', 'RUN;', code)
# 4、在结尾加上分号';'
all_match_list = refindall('[0-9]+\n', code)
for idx in range(len(all_match_list)):
original_str = all_match_list[idx]
new_str = all_match_list[idx][:-1]+';\n'
code = codereplace(original_str, new_str)
all_match_list = refindall(')\n', code)
for idx in range(len(all_match_list)):
original_str = all_match_list[idx]
new_str = all_match_list[idx][:-1]+';\n'
code = codereplace(original_str, new_str)
# 用var来替代inputVector
dictionary = {'inputVector(0)':'sepal_length',
'inputVector(1)':'sepal_width',
'inputVector(2)':'petal_length',
'inputVector(3)':'petal_width'}
for key in dictionarykeys():
code = codereplace(key, dictionary[key])
# 修改预测标签
code = resub('MathExp', 'Exp', code)
code = resub('pred = \n', '', code)
temp_var_list = refindall(r"var[0-9]+(\d)", code)
for var_idx in range(len(temp_var_list)):
code = resub(resub('\(', '\(', resub('\)', '\)', temp_var_list[var_idx])), iristarget_names[var_idx]+'_prob', code)
登录后复制
对以上脚本分步解释说明一下。
1、开头、结尾、输出名称
前三个部分非常简单。使用正则表达式删除多余的行,然后将脚本的开头更改为DATA pred_result; \ nSETdataset_name;。
使用过SAS的同学就很熟悉了,pred_result是运行SAS脚本后的输出表名称,dataset_name是我们需要预测的输入表名称。
最后再将脚本的结尾更改为RUN;。
# 移除SAS中不能使用的代码
code = resub('Dim var As Double', '', code)
code = resub('End If', '', code)
# 下面 *** 作将修改成符合SAS的代码
# 修改起始
code = resub('Module Model\nFunction pred(ByRef inputVector() As Double) As Double()\n',
'DATA pred_result;\nSET dataset_name;', code)
# 修改结尾
code = resub('End Function\nEnd Module\n', 'RUN;', code)
登录后复制
2、语句末尾添加分号
为遵循SAS中的语法规则,还需将每个语句的结尾加上;。仍用正则表达式,然后for循环在每一行最后添加字符;即可。
# 在结尾加上分号';'
all_match_list = refindall('[0-9]+\n', code)
for idx in range(len(all_match_list)):
original_str = all_match_list[idx]
new_str = all_match_list[idx][:-1]+';\n'
code = codereplace(original_str, new_str)
all_match_list = refindall(')\n', code)
for idx in range(len(all_match_list)):
original_str = all_match_list[idx]
new_str = all_match_list[idx][:-1]+';\n'
code = codereplace(original_str, new_str)
登录后复制
3、映射变量名称
使用字典将InputVector与变量名称映射到输入数据集中,一次性更改所有InputVector。
# 用var来替代inputVector
dictionary = {'inputVector(0)':'sepal_length',
'inputVector(1)':'sepal_width',
'inputVector(2)':'petal_length',
'inputVector(3)':'petal_width'}
for key in dictionarykeys():
code = codereplace(key, dictionary[key])
登录后复制
4、映射变量名称
最后一步就是更改预测标签。
# 修改预测标签
code = resub('MathExp', 'Exp', code)
code = resub('pred = \n', '', code)
temp_var_list = refindall(r"var[0-9]+(\d)", code)
for var_idx in range(len(temp_var_list)):
code = resub(resub('\(', '\(', resub('\)', '\)', temp_var_list[var_idx])), iristarget_names[var_idx]+'_prob', code)
登录后复制
然后保存sas模型文件。
#保存输出
vb = open('vb1sas', 'w')
vbwrite(code)
vbclose()
登录后复制
最后,为了验证sas脚本是否正确,我们将sas模型的预测结果和Python的结果进行一下对比。
# python 预测
python_pred = pdDataFrame(modelpredict_proba(X_test))
python_predcolumns = ['setosa_prob','versicolor_prob','virginica_prob']
python_pred
# sas 预测
sas_pred = pdread_csv('pred_resultcsv')
sas_pred = sas_prediloc[:,-3:]
sas_pred
(abs(python_pred - sas_pred) > 000001)sum()
登录后复制
可以看到,两个预测的结果基本上一样,基本没问题,我们就可以在sas中跑xgboost模型了。
总结
上面只是个最简单的示例,没有对特征处理。对于复杂的建模过程,比如很多特征工程,那就要对Python脚本进一步调整了。
以上就是本次分享的所有内容,如果你觉得文章还不错,欢迎关注公众号:Python编程学习圈,每日干货分享,发送“J”还可领取大量学习资料,内容覆盖Python电子书、教程、数据库编程、Django,爬虫,云计算等等。或是前往编程学习网,了解更多编程技术知识。
python
机器学习
数据挖掘
视频教程-完整的Python和SAS数据分析-大数据
422阅读·0评论·0点赞
2020年5月28日
python 访问sas 逻辑库,SAS | 逻辑库和SAS数据集
460阅读·0评论·0点赞
2021年4月26日
python学习笔记---linux/windows调用sas程序
875阅读·0评论·0点赞
2019年10月24日
python可以代替sas_Python、 R 语言、SAS、SPSS 优缺点比较?(转)
604阅读·0评论·1点赞
2020年12月17日
python 访问sas 逻辑库_SAS编程基础 - 逻辑库和数据集
138阅读·0评论·0点赞
2020年12月9日
服务器部署sas_如何在阿里云SAS上部署WordPress网站
1429阅读·0评论·0点赞
2020年8月29日
python和sas配合使用_太骚了!Python模型完美切换SAS,还能这么玩。。
1963阅读·0评论·2点赞
2021年1月14日
python导入sas数据集_将变量从SAS传递到Python
344阅读·0评论·0点赞
2021年2月3日
python 访问sas 逻辑库_SAS岩论 | 在Jupyter Notebook中使用SAS
429阅读·0评论·0点赞
2020年12月9日
#sas建模-建模入门介绍
2257阅读·0评论·2点赞
2019年9月18日
#sas建模-建模过程介绍
2805阅读·1评论·0点赞
2019年9月18日
python调用sas_SAS日常使用的语句预定的python表达
370阅读·0评论·0点赞
2020年12月8日
python读取sas数据集_SASpy模块,利用Python *** 作SAS
1432阅读·0评论·0点赞
2020年11月26日
python可以代替sas,像SAS一样转置的python数据帧
156阅读·0评论·0点赞
2021年4月27日
sas和python的区别 知乎_银行业为什么喜欢用 sas 而不是 python?
1559阅读·0评论·0点赞
2020年12月9日
python和sas代码编写_如何从SAS到python编写if语句
329阅读·0评论·0点赞
2021年1月29日
saspython知乎_pyt
以上就是关于会用且现在能用SPSS的人进来~急!!!全部的内容,包括:会用且现在能用SPSS的人进来~急!!!、sas 中如何实现类似excel中edate的功能、sas化部署是什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)