楼主: 许愿142001
1331 7

[学习分享] 帮忙处理数据,互相学习! [推广有奖]

  • 5关注
  • 0粉丝

本科生

37%

还不是VIP/贵宾

-

威望
0
论坛币
433 个
通用积分
0.1200
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
4060 点
帖子
59
精华
0
在线时间
42 小时
注册时间
2016-8-31
最后登录
2023-6-12

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
本人学生,sas新手,初入论坛已经受到多人帮助。新开此贴,希望大家可以分享sas数据处理的题目(附数据,代码亦可附),当然实际问题也可贴到此贴,请大家帮忙解决。
望多多支持,不要见笑哈

二维码

扫码加我 拉你入群

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

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

关键词:处理数据 互相学习 sas数据处理 实际问题 数据处理

沙发
Strive、 发表于 2016-9-15 14:28:03 |只看作者 |坛友微信交流群
人工帮顶,相互学习~

使用道具

藤椅
许愿142001 发表于 2016-9-15 14:41:21 |只看作者 |坛友微信交流群
先发一题
  1. proc import out= lian1
  2.         datafile ="C:\Users\Xuyuan\Desktop\sas数据\中药加缺失数据.xls"
  3.         dbms = excel;
  4.         getnames =yes;
  5. run;

  6. data lian11;
  7.         set lian1;
  8.         id        = _n_;
  9.         i = 1;
  10.         do while (scan(_col1,i) ne ''); /*拆分*/
  11.                 item = scan(_col1,i);
  12.                 output;        
  13.                 i = i+1;
  14.         end;

  15. run;

  16. data lian12;
  17.         set lian11;
  18.         item = compress(item,,'d');
  19.         keep id item;
  20. run;
复制代码
有一个疑问,为什么这样没有删掉数字呢?
  1. data lian11;
  2.         set lian1;
  3.         id        = _n_;
  4.         i = 1;
  5.         do while (scan(_col1,i) ne ''); /*拆分*/
  6.                 item = scan(_col1,i);
  7.                 output;        
  8.                 i = i+1;
  9.         end;

  10.         item = compress(item,,'d');
  11.         keep id item;
  12.         
  13. run;
复制代码


题目.PNG (80.63 KB)

题目.PNG

数据.PNG (101.66 KB)

数据.PNG

中药加缺失数据.xls

160.5 KB

使用道具

板凳
Strive、 发表于 2016-9-15 14:49:19 |只看作者 |坛友微信交流群
问题:
        item = compress(item,,'d');  与compress(item,“0123456789”)不应该是同样的效果吗?  为何SAS中前者无法去除数字?

使用道具

报纸
wang1839 在职认证  发表于 2016-9-23 11:14:41 |只看作者 |坛友微信交流群
SAS help里写的很清楚,
data chk;
a="12abbc";
b=compress(a, , "d");
run;

使用道具

地板
wang1839 在职认证  发表于 2016-9-23 11:15:25 |只看作者 |坛友微信交流群
SAS help里写的很清楚,
data chk;
a="12abbc";
b=compress(a, , "d");
run;

使用道具

7
sas9.4 发表于 2016-9-25 20:09:18 |只看作者 |坛友微信交流群
compress 好像不能处理中文字符

使用道具

8
许愿142001 发表于 2016-9-27 13:17:29 |只看作者 |坛友微信交流群
关于宏的课堂练习,第五个还没解决。

1、产生一个数据集,

    包含变量X的100个随机数。
    随机数服从均数为1,方差为2的正态分布。
  1. /*1*/
  2. data a ;        
  3.         do i = 1 to 100;
  4.                 x=rand('normal',1,sqrt(2));
  5.         end;
  6. run;
复制代码


2、产生一个数据集
  包含变量X1-X100,每个变量100个随机数。
  随机数服从均数为1,方差为2的正态分布。
/*2*/
  1. data b;
  2.    
  3.     array x x1-x100;
  4.     do i = 1 to 100;
  5.         do over x;
  6.             x=rand('normal',1,sqrt(2));
  7.         end;
  8.         output;
  9.     end;
  10.    
  11. run;
复制代码




3、请将程序改写成宏,要求如下
  产生数据集,包含m个变量
  每个变量有n个随机数
  随机数都服从,均数为mean,方差为sigma的正态分布
  并可以定义数据集的名称。
  1. /*3*/
  2. %macro normal(m,n ,mean,sigma,name) ;
  3. data &name.;
  4.         array x x1-x&m.;
  5.         %do i =1 %to &n.;
  6.                 do over x;
  7.                         x=Rand('NORMAL',&mean.,sqrt(&sigma.));
  8.                 end;  
  9.                 output;
  10.         %end;
  11.   run;
  12. %mend;

  13. %normal(100,100,1,2,bbb);
复制代码



4、请将程序改写成宏,要求如下
  产生数据集,包含m个变量
  每个变量有n个随机数
  所有变量都服从以下规律
  第i个变量的第j个随机数服从均数为(i除以3的余数),方差为j/2的正态分布
  并可以定义数据集的名称。
  1. /*4*/
  2. %macro normal2(m,n ,name) ;
  3. data &name.;
  4.         array x{&m} x1-x&m.;
  5.         %do i =1 %to &n.;
  6.                 do j=1 to &m. ;
  7.                         %let mean=mod(j,3);
  8.                         %let sigma_sd = sqrt(0.5*&i.);
  9.                          x{j}=Rand('NORMAL', &mean.,&sigma_sd.);
  10.                 end;  
  11.                 output;
  12.         %end;
  13.   run;
  14. %mend;

  15. %normal2(11,11,ddd);
复制代码




5、在以上基础上,新增功能,指定不同的分布类型(非常感谢 ID:孤单的我们)
  请参考:https://bbs.pinggu.org/forum.php?mod=viewthread&tid=4848792&page=1&extra=#pid39050866
  1. %macro F(m,n ,name,type) ;
  2. data &name.;
  3.         array x{&m} x1-x&m.;
  4.         %do i =1 %to &n.;
  5.                 do j=1 to &m. ;
  6.                         %let mean=mod(j,3);
  7.                         %let sigma_sd = sqrt(0.5*&i.);
  8.                          x{j}=Rand("&type", &mean.,&sigma_sd.);
  9.                 end;  
  10.                 output;
  11.         %end;
  12.   run;
  13. %mend;

  14. %F(100,100,eee,NORMAL);
复制代码



使用道具

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

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

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

GMT+8, 2024-4-30 18:15