楼主: andy162639
8982 22

[原创博文] sas变量批量删除 [推广有奖]

  • 3关注
  • 6粉丝

已卖:494份资源

教授

90%

还不是VIP/贵宾

-

威望
0
论坛币
7002 个
通用积分
229.5706
学术水平
14 点
热心指数
15 点
信用等级
4 点
经验
8631 点
帖子
1205
精华
0
在线时间
1317 小时
注册时间
2010-5-5
最后登录
2025-12-21

楼主
andy162639 发表于 2011-11-6 11:57:49 来自手机 |AI写论文
100论坛币
某数据集有2个观测(2行),1000个变量,我想把第一个观测第200以后的变量值变为缺失值,如何处理?要代码,谢谢!

最佳答案

HaricH 查看完整内容

楼主咋发两个贴?要送200金币? 如果变量类型统一的话可以用数组。下面是非数组方法: data a; input x y z t w $; cards; 1 2 3 4 s 3 4 2 1 s ; run; %macro cut(ds=,cutnum=); proc contents data=&ds out=b(keep=name varnum); run; proc sql noprint; select name into:name_list separated by '-' from b where varnum>=&cutnum. order by varnum ; q ...
关键词:变量值 数据集 缺失值 第20 如何

本帖被以下文库推荐

沙发
HaricH 发表于 2011-11-6 11:57:50
楼主咋发两个贴?要送200金币?

如果变量类型统一的话可以用数组。下面是非数组方法:
data a;
input x y z t w $;
cards;
1 2 3 4 s
3 4 2 1 s
;
run;

%macro cut(ds=,cutnum=);

proc contents data=&ds out=b(keep=name varnum);
run;

proc sql noprint;
        select name into:name_list separated by '-'
        from b
        where varnum>=&cutnum.
        order by varnum
        
;
quit;

%put &name_list.;

data a;
set a;
%let i=1;
%do %while(%scan(&name_list,&i,-) ne %quote());
        %let var=%scan(&name_list,&i,-);
        if _n_>1 then
                call missing(&var);
        %let i=%eval(&i+1);
%end;
run;

%mend;


%cut(ds=a , cutnum=2)
已有 1 人评分学术水平 热心指数 收起 理由
andy162639 + 1 + 1 精彩帖子

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

藤椅
yugao1986 发表于 2011-11-6 14:13:16
proc iml;
   seed=j(2,1000);
   call randgen(seed,"uniform");/*产生一个样本数据seed*/
   print seed;
   seed[1,201:1000]=.;/*替换*/
   print seed;
quit;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
andy162639 + 1 + 1 + 1 鼓励积极发帖讨论

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

三人行必有我师

板凳
andy162639 发表于 2011-11-6 14:37:13 来自手机
yugao1986 发表于 2011-11-6 14:13 proc iml; seed=j(2,1000); call randgen(seed,"uniform");/*产生一个样本数据seed*/
忘记说了,补充一下,我如何知道某变量是第多少个变量呢?多谢。比如 x y z我想删除y z的值 我怎么知道y是第二个变量呢?
有人说,统计归根结底就是个P

报纸
yugao1986 发表于 2011-11-6 17:28:44
andy162639 发表于 2011-11-6 14:37
忘记说了,补充一下,我如何知道某变量是第多少个变量呢?多谢。比如 x y z我想删除y z的值 我怎么知道y是 ...
检查下数据看看,proc content 或者datasets,
三人行必有我师

地板
andy162639 发表于 2011-11-7 10:25:16
用 proc iml的话, 导出后,如何恢复原先变量名呢?
有人说,统计归根结底就是个P

7
yugao1986 发表于 2011-11-7 11:42:23
andy162639 发表于 2011-11-7 10:25
用 proc iml的话, 导出后,如何恢复原先变量名呢?
以你另一个帖子的例子,为例:
/*数据*/
data a;
input x y z t;
cards;
3 4 2 1
1 2 3 4
;
run;
proc iml;
   use a;     /*读入数据*/
   read all var  {x y z t};/*变量*/
   read all var _all_ into m;/*数据读入矩阵m*/
   print m ;/*查看*/
   m[2,2:4]=.;/*将第二行观察的,第2-4列数据替换为缺失*/
   create new var{x y z t} ;/*新建数据new*/
   append from m; /*将矩阵数据读入new*/
quit;
proc print data=new;run;/*查看new*/
三人行必有我师

8
andy162639 发表于 2011-11-7 11:54:56
多谢回答,还有个疑问 就是因为原数据集变量名很多,我怎样将原数据集的变量全部取出来呢?
就是以下步骤:create new var{x y z t} ;/*新建数据new*/
变量名很多,我无法手工输入,谢谢。
有人说,统计归根结底就是个P

9
numman 发表于 2011-11-7 16:09:12
数据量大的时候 建议用 HaricH 的方法

10
andy162639 发表于 2011-11-7 16:51:25
HaricH 发表于 2011-11-7 11:59
楼主咋发两个贴?要送200金币?

如果变量类型统一的话可以用数组。下面是非数组方法:
谢谢你的解答,还有一个疑问,如果观测2是从第2个变量开始删,观测3是从第3个变量开始删,您的宏如何修改呢?谢谢!
data a;
input x y z t;
cards;
3 4 2 1
1 2 3 4
2 3 3 4
;
run;

有人说,统计归根结底就是个P

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 01:56