楼主: basswawa
3845 18

请教位置函数 [推广有奖]

  • 0关注
  • 1粉丝

大专生

81%

还不是VIP/贵宾

-

威望
0
论坛币
922 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
442 点
帖子
48
精华
0
在线时间
62 小时
注册时间
2008-7-7
最后登录
2013-8-22

楼主
basswawa 发表于 2010-6-17 07:31:14 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
数据是这样:
编号    i     q
1  
2      
3            1      2
4
5  
6            2     2
7  
8  
9            3     2
...
我想做出q值,它分别表示在1之前数据的个数,1和2之间的个数,2和3之间的个数。。等等。。
如此类的程序,应该怎么做呢。非常感谢!
或者知道某个数的位置也行,。。比如变量i里1的位置是3,2的位置是6,这样相减也可以得出q值了。。
可是找了半天也不知道位置函数是什么。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:非常感谢 不知道 怎么做 程序

沙发
Jack315 发表于 2010-6-17 08:49:06
Excel中的方法:
设“编号”在A列,从A1开始;“i”在B列,从B2开始。在C列的对应行上输入公式“=COUNT($A$2,A[row])”。然后再把这些公式的结果做相应的计算即可。

藤椅
nkwilling 发表于 2010-6-17 12:29:29
data jaccard;
input kw$ x1 x2 x3 x4 x5 x6 x7 x8 word;
cards;
a 0 0 1 0 1 0 0 0 2
b 0 0 0 1 1 0 0 0 2
c 0 0 1 0 0 0 0 0 1
d 0 0 0 1 1 0 0 0 2
e 0 0 0 1 0 0 0 0 1
;
run;

data jaccard;
   set jaccard;
   array arr{*} x:;
   do fst_index=1 to dim(arr);
      if arr(fst_index) then leave;
   end;
   do lst_index=dim(arr) to 1 by -1;
      if arr(lst_index) then leave;
   end;

run;

板凳
basswawa 发表于 2010-6-17 16:38:12
to Jack315:  用excel作不行,我须写出SAS程序来哦。。

to nkwilling:  我也尝试用array ,关键问题是我的数据很庞大,都在excel表里,怎样才能不用input,直接导入数据后编程呢。。

报纸
xiaosanmao 发表于 2010-6-17 16:52:30
basswawa 发表于 2010-6-17 16:38
to Jack315:  用excel作不行,我须写出SAS程序来哦。。

to nkwilling:  我也尝试用array ,关键问题是我的数据很庞大,都在excel表里,怎样才能不用input,直接导入数据后编程呢。。
我晕,nkwilling写的才是关键的地方,你仿一些就好了
你说自己尝试用array,看来也是懂一些sas吧,
怎么你认为input导入才是关键的地方呢?
excel导入sas的部分还需要求助么?
这个不是显然的么

地板
basswawa 发表于 2010-6-17 17:41:44
我看懂版主写的,但是我的数据不是多维的,用array可以找出某个字符所在的位置,。。。是一维数据里某个元素的位置,。。怎么说,。。。我不能把数据转置过来在算的

7
nkwilling 发表于 2010-6-17 19:42:31
稍等,洗个澡,马上回来给你解决。

8
nkwilling 发表于 2010-6-17 20:08:51
如果我没有理解错你的意思,你所提问题里面,i列没有值的地方应该是缺失值,是吗?如果这样,那根本不需要动用array这个洲际导弹,retain语句足矣,代码如下:

data a;
input id i ;
cards;
1 .
2 .
3 1
4 .
5 .
6 .
7 2
8 .
9 3
;
run;

data final;
set a;
retain rt 0;
rt+1;
if i ne . then do q=rt-1;rt=0;end;
run;

9
basswawa 发表于 2010-6-17 21:43:52
结果太对了,就是我要的!  程序也好简单,容我先看看,还没太明白。。
Unbenannt.bmp
把rt-1付赋给q的时候,rt值是0,q不是等于-1了么?这个叠代始终看不出明白呢

10
nkwilling 发表于 2010-6-18 08:47:57
看来你还没有IT的思维.SAS是逐行编译执行语言.在上面的语句中,q=rt-1语句在前,rt=0语句在后,而最开始的rt+1又保证了rt的值不会等于0,除非你给它一个假定(就是这里的if语句).所以,q值永远不可能等于-1.
你可以看看SAS的PDV.如果不介意,我自己写的书<SAS编程与数据挖掘商业案例>里面有很详细的介绍.

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-3 15:45