楼主: 爱萌
1487 4

[问答] 求:怎么重复以下东西 [推广有奖]

贵宾

学术权威

55%

还不是VIP/贵宾

-

威望
8
论坛币
96939 个
通用积分
12.2915
学术水平
231 点
热心指数
299 点
信用等级
157 点
经验
102615 点
帖子
6194
精华
1
在线时间
2021 小时
注册时间
2007-3-2
最后登录
2021-8-28

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
data a;
input  id $20. x1-x6;
cards;
aa /// bb /// cc 1 2 3 4 4 5
dd /// ee         1 2 3 8 9 10
;
如何将其转化成,
aa   0.333 0.6667 1 1.3333 1.3333 1.6667
bb    0.333 0.6667 1 1.3333 1.3333 1.6667
cc    0.333 0.6667 1 1.3333 1.3333 1.6667
.....
这个结果就是如果变量中有‘///’的个数+1,后面的数据除以(个数+1)
现在有点头疼,搞不定,请帮忙处理一下!
谢谢了!
二维码

扫码加我 拉你入群

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

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

关键词:cards Input card Data put 如何

回帖推荐

soporaeternus 发表于2楼  查看完整内容

抛砖引玉......

本帖被以下文库推荐

最恨对我说谎或欺骗我的人
沙发
soporaeternus 发表于 2011-2-28 15:45:36 |只看作者 |坛友微信交流群
  1. data a(rename=(id1=id));
  2. retain id1;
  3. input  id:$20. x1-x6;
  4. array xx x1-x6;
  5. do i=1 to count(id,"///")+1;
  6.         id1=scan(id,i,"///");
  7.         do over xx;
  8.                 xx=xx/(count(id,"///")+1);
  9.         end;
  10.         output;
  11. end;
  12. drop id  i;
  13. cards;
  14. aa///bb///cc 1 2 3 4 4 5
  15. dd///ee         1 2 3 8 9 10
  16. ;
  17. run;
复制代码
抛砖引玉......
已有 2 人评分经验 论坛币 学术水平 热心指数 收起 理由
crackman + 20 + 20 + 1 + 1 精彩帖子
爱萌 + 40 + 100 + 1 谢谢

总评分: 经验 + 60  论坛币 + 120  学术水平 + 1  热心指数 + 2   查看全部评分

Let them be hard, but never unjust

使用道具

藤椅
爱萌 发表于 2011-2-28 16:22:20 |只看作者 |坛友微信交流群
data a(rename=(id1=id));
retain id1;
input  id:$20. x1-x6;
array xx x1-x6;
do over xx;
xx=xx/(count(id,"///")+1);
end;
do i=0 to count(id,"///");
id1=scan(id,i+1,"///");
output;
end;
drop id  i;
cards;
aa///bb///cc 1 2 3 4 4 5
dd///ee         1 2 3 8 9 10
  ;
这个程序基于上面修改而成
最恨对我说谎或欺骗我的人

使用道具

板凳
hopewell 发表于 2011-2-28 20:48:05 |只看作者 |坛友微信交流群
  1. data raw(drop=i id_count);
  2.     length id $10;
  3.     array xx x1-x6;
  4.     input @;
  5.     id_count=count(_infile_,'///');
  6.     do i=dim(xx) to -id_count by -1;
  7.         if i ge 1 then xx(i)=input(scan(_infile_,i+1,' '),best.)/(id_count+1);
  8.         else do;
  9.             id=scan(_infile_,abs(i)+1,'/ ');
  10.             output;
  11.         end;
  12.     end;
  13. datalines;
  14. aa///bb///cc 1 2 3 4 4 5
  15. dd///ee         1 2 3 8 9 10
  16. ;
复制代码
已有 1 人评分经验 热心指数 收起 理由
crackman + 40 + 2 精彩帖子

总评分: 经验 + 40  热心指数 + 2   查看全部评分

观钓颇逾垂钓趣 种花何问看花谁

使用道具

报纸
邢不行 在职认证  发表于 2011-2-28 21:13:47 |只看作者 |坛友微信交流群
  1. data a(rename=(id1=id));
  2. retain id1;        /*这句话应该是可要可不要的,放在这里是为了将id1变量放到最前面。不知道对不对...*/
  3. input  id:$20. x1-x6;
  4. array xx x1-x6;
  5. do i=1 to count(id,"///")+1; /*count()函数功能是计算出id字符串中“///”出现的次数*/
  6.         id1=scan(id,i,"///");  
  7.         do over xx;                  /*还可以这么用over,学习了...*/
  8.                 xx=xx/(count(id,"///")+1);
  9.         end;
  10.         output;
  11. end;
  12. drop id  i;
  13. cards;
  14. aa///bb///cc 1 2 3 4 4 5
  15. dd///ee         1 2 3 8 9 10
  16. ;
  17. run;
复制代码
作为菜鸟,就来解释解释大神的代码,一边学习一边解释...
请问count()函数第三个参数“i”和“t”分别代表什么意思,看了help里的英文模模糊糊的,不知道理解的对不对
不管去哪里 只要在路上

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 21:22