返回首页
当前位置: 主页 > 办公软件 > Excel教程 >

SPSS Syntax学习教程

时间:2014-11-12 11:58来源:电脑教程学习网 www.etwiki.cn 编辑:admin

* ============================================================.
* File: 擂题二.
* Purpose: SPSS中文论坛擂题二.
* Author: GTds.
* Written: 2005.05.03.
* Notes: .
* ============================================================.
*=============================================================.
* 第一级(*,20分):数据文件中存在的空白记录问题,指的是整行都缺失数据的情况。用SPSS Syntax快速删除空白记录,并保存该文件ex1.sav.
*=======================================================.
* 解析:删除记录的另一种思考角度就是保留剩余的其他记录。整行缺失换言之即是该行任何一个变量都是缺失,相斥的情况就是至少有一个变量具有有效值.
*----------------------------------------------------------------------------------------------------------------.
*方法一:缺失值少于变量个数.
get file 'F:\SPSS擂题\theme park.sav'.
sel if nmiss(custnum to firstvis)<15.
exe.

save outfile "F:\SPSS擂题\ex1.sav".
*----------------------------------------------------------------------------------------------------------------.
*方法二:至少有一个有效值.
get file 'F:\SPSS擂题\theme park.sav'.

sel if nvalid(custnum to firstvis) >0.
exe.

save outfile "F:\SPSS擂题\ex1.sav".
*----------------------------------------------------------------------------------------------------------------.
*方法三:至少有一个不是缺失值.
get file 'F:\SPSS擂题\theme park.sav'.

sel if ~ miss(max(custnum to firstvis)).
exe.

save outfile "F:\SPSS擂题\ex1.sav".

*=============================================================.
* 第二级(**,30分):该数据文件包含一些重复记录,请采用有效方法彻底清除这些重复记录,保留单一记录,然后保存为文件ex2.sav。
请问有多少重复记录?请用SPSS Syntax 保存所有操作过程。.
*=======================================================.
*方法一:检查一组(或所有)变量的重复.

get file 'F:\SPSS擂题\ex1.sav'.

sort case by all.
match files
/file *
/by all
/first=Primary.
val lab primary 0 "重复记录" 1"有效记录".
freq Primary./*根据频数表,有15条重复记录需要删除.

sel if primary=1.
exe.

save outfile "F:\SPSS擂题\ex2.sav"/drop primary .

*----------------------------------------------------------------------------------------------------------------.
*方法二:检查一个关键字段的重复.
*在本例中,custnum是个关键变量(每条记录都有唯一的custnum),这种方法计算结果与方法一相同.
*这种方法比方法一更容易理解,且使用方便。当然,对于更复杂的数据结构则需要判断是否适用。.

get file 'F:\SPSS擂题\ex1.sav'.

sort case by all.
compute Primary=lag(custnum)~=custnum |miss(lag(custnum)).
val lab primary 0 "重复记录" 1"有效记录".
freq Primary./*根据频数表,有15条重复记录需要删除.

sel if primary=1.
exe.

save outfile "F:\SPSS擂题\ex2.sav"/drop primary .

*=============================================================.
* 第三级(****,40分):将文件ex2.sav中的记录,请用SPSS Syntax 将Ticketno≤475685041的样本中随机抽取50个记录,
在Ticketno>475685041的样本中又随机抽取50个记录,合成一个新的数据集ex3.sav。能否实现任意指定Ticketno的抽取范围,
然后可以实现随机抽样?例如在21778332≤Ticketno≤220015616中随机抽取50个记录。.
*=======================================================.
*方法一: 分情况下的一步完成,不需要再合并数据库.
*本例中,要求分两种情况各抽取50,然后合并为一.因此首先计算出各种情况的Cases数,然后直接使用sample命令即可.
*但是需要依据频数表结果来手动指定From后面的数值,难以重复实现任意指定范围的随机抽样,适合一次性操作.

get file 'F:\SPSS擂题\ex2.sav'.

compute dummy=custnum>475685041.
val lab dummy 0"custnum≤475685041" 1"custnum>475685041".
freq dummy ./*根据频数表知道两种情况分别有422,700个记录.
del var dummy.

do if custnum>475685041.
sample 50 from 422.
else.
sample 50 from 700.
end if.
exe.

save outfile "F:\SPSS擂题\ex3.sav" .

*----------------------------------------------------------------------------------------------------------------.
*方法二:用宏实现任意条件下的随机抽样.
*根据SPSS的算法手册,sample命令的计算等同于下述过程.

define sampling (expr=!ENCLOSE("(",")")
/size=!TOKENS(1))
sel if !expr.
compute idno=$casenum .
sort case by idno(d).

do if $casenum = 1.
compute #s1=!size.
compute #s2=idno.
end if.
do if #s2 > 0.
compute dummy = uniform(1)* #s2 < #s1.
compute #s1 = #s1 - dummy.
compute #s2 = #s2 - 1.
else.
compute dummy = 0.
end if.
sel if dummy=1.
exe.
!enddefine.

*-----------------------------------------.
*比如:在21778332≤Ticketno≤220015616中随机抽取50个记录.

------分隔线----------------------------
标签(Tag):SPSS教程 spss
------分隔线----------------------------
推荐内容
猜你感兴趣