SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 2438|回复: 12
打印 上一主题 下一主题

求助求助,毕业论文遇到问题,多谢

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-4-17 21:10:29 | 只看该作者

求助求助,毕业论文遇到问题,多谢

各位大侠,请帮忙了,小女遇到了一个问题,望哪位可以给予指导,万分感谢。
如何在调用TXT格式或者SPSS的数据后(这里的数据只有一列,10000行),将这列数据赋值给一个参数,为后来的程序所用?谢谢
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2009-4-18 18:35:42 | 只看该作者

Re: 求助求助,毕业论文遇到问题,多谢

超出SAS的讨论范围。
使用data ;infile 'mydata.txt' dlm='your_delimiter' missover dsd;input;run; 把txt数据转化成SAS数据。建议有空时学习一下基础知识。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-4-19 02:30:09 | 只看该作者

Re: 求助求助,毕业论文遇到问题,多谢

这是一个向量也是一个数据。这依赖于你如何使用它。比如你可以把这个向量化成1000定量。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2009-4-19 10:25:57 | 只看该作者

Re: 求助求助,毕业论文遇到问题,多谢

多谢大家回复,我是想过不知道行不行,将这个变量设置成一个数组,数组长度是10000,然后将调用的这列10000个值的数据赋给这个数组,这样可行吗?我是新手,都是靠自己琢磨的,多谢各位前辈指教
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2009-4-19 10:31:30 | 只看该作者

Re: 求助求助,毕业论文遇到问题,多谢

回复一楼jeozu :多谢指教,我已经将文本数据转化为sas数据了,只是不知道这些数据能否实现这样的效果:将这一变量设置成数组:数组长度为10000,然后将10000个数据值分别赋给这个数组,这样数组值就可以用了。这样行吗?我是自己琢磨的,可能是比较菜的问题,多谢回复
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2009-4-19 13:08:46 | 只看该作者

Re: 求助求助,毕业论文遇到问题,多谢

[code:3nmhc6sp]
data out;
array A{1000} numeric;
do i=1 to 1000;
    set yourdataset end=eof;
    A{i}=yourvariable;
end;
run;
[/code:3nmhc6sp]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2009-4-19 16:15:34 | 只看该作者

Re: 求助求助,毕业论文遇到问题,多谢

多谢jeozu,我这就去试,如有问题希望您能多多指教
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2009-4-19 23:24:14 | 只看该作者

Re: 求助求助,毕业论文遇到问题,多谢

data out;
array A{1000} numeric;
do i=1 to 1000;
    set yourdataset end=eof;
    A{i}=yourvariable;
end;
run;
几点请教:ARRAY长度为1000,缘何只有一个表格名字?END=EOF 的作用是什么?
其实问题有可能很简单。我们没有把它定义清楚而已。也就说这个向量N*1的作用是什么?我认为,对于SAS,数据的存在要么是表格,DATA,要么是定量CONSTANT,---
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2009-4-20 17:20:16 | 只看该作者

Re: 求助求助,毕业论文遇到问题,多谢

平时都会加上error check..;
比如: if eof then leave; 防止dataset的nobs<1000;
不过,更倾向于使用
%let fid=%sysfunc(open(mydata));
%let n=%sysfunc(attrn(&fid, nobs));
%let rc=%sysfunc(close(&fid));
data a;
array a{&n};
set ....;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2009-4-20 17:48:53 | 只看该作者

具体代码是这样的

libname nor'E:\sasdata';
options nodate linesize=max pagesize=max;
proc import out=abilities
datafile="E:\sasdata\ability\230\230qwa.txt"     /*一个只有一列的数据,这一列数据是能力值,想用一种方式赋给一个参数(可用数组吗),使得下面的ability,在循环中能用*/
dbms=dlm replace;
getnames=yes;
datarow=2;
run;
data nor.eci4230(keep=ability  x1-x30 eci4);     /*这是一个模拟10000个人在不同难度的30题上,可能会作出何种回答的模拟数据过程,后来根据模拟出的数据计算一些指数eci4*/

input b1-b30 @@;          /*这里的30是题目数,b是题目难度,b所需数据在最下方cards处,目的在于模拟具有不同的能力值ability10000个人,回答得30个题目,所答成绩是X1-X30*/
array b{30};
array a{30};
do i=1 to 30;
a(i)=0.5+0.6*ranuni(0);
end;


do n=1 to 10000;          /*这里循环10000次,就是代表有10000个人,*/
ability=rannor(0);        /*这里的ability本来用的是分布好一个函数,现在不用想这个了,想换成上面调用的文本数据中的那列数据,共10000个人的能力值 */
                          /*请您只要帮我将上面调用的文本文件的一列数据,赋给这个参数ability或通过数组转换一下,以便那能在后边使用*/
array c{30};
array qwp{30};
array p{30};
array x{30};
array cova{30};
array covb{30};
do i=1 to 30;
c(i)=ranuni(0);
qwp(i)=1/(1+exp(-1.7*a(i)*(0-b(i))));
p(i)=1/(1+exp(-1.7*a(i)*(ability-b(i))));     /*这里的ability同上,作用也同上。只要ability能用,其他的就都能算出来了*/
end;


xs=0;
ps=0;
gs=0;
covaz=0;
covbz=0;

do r=1 to 30;
if p(r)<c(r) then x(r)=0 ;             /*根据概率等计算每个人在每个题上可能会作出的答案,因为是模拟数据*/
else x(r)=1;

xs=xs+x(r);    /*求每个人在30个题目上的得分均值*/
ps=ps+p(r);
gs=gs+qwp(r);
end;

xm=xs/30;
pm=ps/30;
gm=gs/30;

do r=1 to 30;
cova(r)=(x(r)-xm)*(p(r)-pm);
covb(r)=(qwp(r)-gm)*(p(r)-pm);
covaz=covaz+cova(r);
covbz=covbz+covb(r);
end;

covs=covaz/30;
covx=covbz/30;
eci4=1-covs/covx;

output;
end;

cards;
-2
-1.867
-1.734
-1.601
-1.468
-1.335
-1.202
-1.069
-0.936
-0.803
-0.67
-0.537
-0.404
-0.271
-0.138
-0.005
0.128
0.261
0.394
0.537
0.69
0.843
0.996
1.13
1.292
1.425
1.558
1.7
1.854
2
run;
proc print;
run;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-5 15:49 , Processed in 0.083853 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表