楼主: crackman
3756 6

[原创博文] 跟crackman读SAS程序(33)----替换缺失值以及生成缺失值 [推广有奖]

院士

83%

还不是VIP/贵宾

-

威望
6
论坛币
91908 个
通用积分
23.3245
学术水平
424 点
热心指数
505 点
信用等级
256 点
经验
113002 点
帖子
2948
精华
0
在线时间
2529 小时
注册时间
2007-4-26
最后登录
2024-4-23

初级热心勋章 中级热心勋章 初级学术勋章 初级信用勋章

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
/*缺失值统一修改为0*/
data numbers;                                                           
  input var1 var2 var3;    /*三个变量全部是数值型*/                                               
datalines;                                                              
7 1 4                                                                  
. 0 8                                                                  
9 9 .                                                                  
5 6 2                                                                  
8 3 0                                                                  
;                                                                                                                                          
data nomiss(drop=i);                                                   
  set numbers;                                                            
  array testmiss(*)  _numeric_;  /*创建数组,数值的元素为本次数据集中所有数值型变量*/                                          
  do i = 1 to dim(testmiss); /*循环,利用DIM函数获得数组的元素个数*/                                             
    if testmiss(i)=. then testmiss(i)=0;  /*对每次读一个观测,对观测里面的每一个变量进行判断*/                                 
  end;                                                                    
run;                                                                    
proc print;
run;

/*将0替换成缺失值*/
data deptnum;                              
  input dept qtr1 qtr2 qtr3 qtr4;            
datalines;                                 
101 3 0 4 9                                
410 8 7 5 8                                
600 0 0 6 7                                
700 6 5 0 9                                
901 3 8 7 0                                
;                                                                              
data nozero(drop=i);                       
  set deptnum;                             
  array testzero(*) qtr1-qtr3;      
  do i = 1 to dim(testzero);                 
    if testzero(i)=0 then testzero(i)=.;      
  end;                                       
run;
proc print;
run;
学习之处:
1.数组的使用,以及数组DIM函数,注意如何一次确定数组内的元素以及元素的属性,这里注意的是数组的元素必须一致,要么全部是数值
要么为字符
2.DO 循环在SET机制中的应用。
二维码

扫码加我 拉你入群

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

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

关键词:crackman Ackman sas程序 CRACK 缺失值 numbers 程序

已有 1 人评分学术水平 热心指数 收起 理由
soporaeternus + 1 + 1 一如既往地支持

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

沙发
rdzr 发表于 2010-8-28 09:01:57 |只看作者 |坛友微信交流群
1# crackman

斑竹真是笔耕不缀呀,学习了,谢谢!

建议适当的时候集结成集,发行单行本,这样岂不是功德无量?!

使用道具

藤椅
viterbi 发表于 2010-8-31 13:49:35 |只看作者 |坛友微信交流群
数组这种东西,一般更喜欢隐数组do over 来得爽些

使用道具

板凳
bullstag 发表于 2010-9-10 12:52:34 |只看作者 |坛友微信交流群
楼上说得对do over 更简单点。
  1. data nozero;                       
  2.   set deptnum;                             
  3.   array testzero qtr1-qtr3;      
  4.   do over testzero;                 
  5.     if testzero=0 then testzero=.;      
  6.   end;                              
  7. run;
复制代码
已有 1 人评分学术水平 热心指数 收起 理由
crackman + 1 + 1

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

使用道具

报纸
lihuiyingdudu 发表于 2010-9-10 13:51:59 |只看作者 |坛友微信交流群
请教楼主,像这种提换missing value的,用date set可以做,用micro也可以做,那哪个方法更好些呢?

使用道具

地板
soporaeternus 发表于 2010-9-10 14:01:54 |只看作者 |坛友微信交流群
回楼上,是不是MACRO也能做
如果是
那也应该是借由data步或是某个过程步完成的
Let them be hard, but never unjust

使用道具

7
lihuiyingdudu 发表于 2010-9-11 04:52:12 |只看作者 |坛友微信交流群
回楼上,是的,也用到data步,do loop,差不多

使用道具

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

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

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

GMT+8, 2024-5-2 07:39