全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
6562 35
2011-11-07
悬赏 300 个论坛币 已解决
某数据集有2个观测(2行),1000个变量,我想把第一个观测第200以后的变量值变为缺失值,如何处理?请指教,谢谢!
举例:
data a;
input x y z t;
cards;
1 2 3 4
3 4 2 1
;
run;

如何转换为如下数据集(变量1000个的情况下):
data a;
input x y z t;
cards;
1 2 3 4
3 .  .  .
;
run;
另请教,如何知道变量z在数据集中为第几个变量?

最佳答案

HaricH 查看完整内容

如果变量类型统一的话可以用数组。下面是非数组方法: 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( ...
二维码

扫码加我 拉你入群

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

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

全部回复
2011-11-7 10:38:48
如果变量类型统一的话可以用数组。下面是非数组方法:
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)
二维码

扫码加我 拉你入群

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

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

2011-11-8 17:13:48
ERROR: The text expression length (70395) exceeds maximum length (65534). The text expression
       has been truncated to 65534 characters.
是因为变量名太多了吗? 如果是举例数据集,你的宏是可以的,但是我的变量有9000多个,怎么解决呢?谢谢
还有别的解决办法吗?
二维码

扫码加我 拉你入群

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

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

2011-11-8 17:21:45
如果用iml 变量名需要手工输入,是否有办法不用手工输入?
二维码

扫码加我 拉你入群

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

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

2011-11-8 19:09:02
换种思路,把数据转置,这样把变量名也读入一个矩阵
二维码

扫码加我 拉你入群

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

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

2011-11-8 19:16:28
转置的话删除起来也很麻烦,也存在新的变量名。原来那个宏挺好的,但我不知道为什么变量多了就不行?
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群