全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3571 13
2008-03-14

各位前辈:求助下列问题,望前辈指教!!!       谢谢!!

1、在一个逻辑库x中,有一些数据集:如 a,b,c,d,e  。。。里面是常用的固定数据(型号、重量、长度等等),

   每个数据集里的观测值不一定相同(可能1个、2个或多个)。

   如、数据集a

xh|型号

zl|重量

cd|长度

a1

1

2

a2

3

4

       数据集b

xh|型号

zl|重量

cd|长度

b

5

6

2、现有一个数据集jh,它的观测值是逻辑库x中一些数据集的名称,也有的不在逻辑库x中。如

mc |名称

sl |数量

 a

10

 b

11

 f

12

问题1、如何按照数据集jh中的名称,从逻辑库x中提出来,如逻辑库x中没有的最好能提出警告(提醒添加观测)?

问题2、任何将数据集jh中的数量赋给相同的数据集?

  制成下表:

xh|型号

zl|重量

cd|长度

mc|名称

sl|数量

a1

1

2

a

10

a2

3

4

a

10

b

5

6

b

11

f

7

8

f

12

二维码

扫码加我 拉你入群

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

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

全部回复
2008-3-14 21:26:00

对不起,网速太慢,第一次以为没发出去,结果又发了一次,请版主删掉一条.

二维码

扫码加我 拉你入群

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

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

2008-3-15 03:09:00

可以用 call execute来解决。如果理解不了,可以尝试用宏来解决。

 data nonexist exist;
  set jh;
  if exist(mc) then do;
  call execute("data _temp"||compress(mc)||";");
  call execute("set "||compress(mc)||";");
  call execute("sl="||sl||";");
  call execute("run;");
  output exist;
  end;

  else do; message="Dataset: "||comress(mc)||"not exist, Please Check it.";
        keep mc warning;
        output nonexist;
  end;

data _null_;
  set exist;
  if _n_=1 then call execute("data base; set _temp"||compress(mc)||";run;");
           else call execute("data base; set  base _temp"||compress(mc)||";run;");
run;

proc print data=nonexit;
title "The following dataset(s) doesn't exist in the work library";
run;

[此贴子已经被作者于2008-3-15 10:10:34编辑过]

二维码

扫码加我 拉你入群

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

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

2008-3-15 07:15:00

这个比较简单,主要的思路是把每个数据集加一个MC变量, 然后和jh 合并起来就可以了。这方法很笨, 不过能用。水平有限:-



/*set up table a and b, jh */
data a;
input xh $ zl cd;
datalines;
a1 1 2
a2 3 4
;
run;

data b;
input xh $ zl cd;
datalines;
b 5 6
;
run;




data jh;
input mc $ sl;
datalines;
a 10
b 11
f 12
;
run;

/*end of -- set up table a and b, jh */


/*add 'mc' column to each dataset a, b,...*/
data mc_a;
set a;
mc="a" ;
run;

data mc_b;
set b;
mc="b" ;
run;


/*List 'mc' column only from jh-table */
data jh_MC;
set jh (keep=mc);
run;
/* Merge all databases, Mc_a, Mc_b,... and jh;*/
Data final_data;
merge Mc_a Mc_b jh_mc jh ;
by mc;
if zl=. then do;
put 'Data set not found --' mc;
delete;
end;
run;

二维码

扫码加我 拉你入群

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

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

2008-3-15 07:21:00

其实不用 Data jh_Mc 一步, 简化了一下:




/*set up table a and b, jh */
data a;
input xh $ zl cd;
datalines;
a1 1 2
a2 3 4
;
run;

data b;
input xh $ zl cd;
datalines;
b 5 6
;
run;




data jh;
input mc $ sl;
datalines;
a 10
b 11
f 12
;
run;

/*end of -- set up table a and b, jh */


/*add 'mc' column to each dataset a, b,...*/
data mc_a;
set a;
mc="a" ;
run;

data mc_b;
set b;
mc="b" ;
run;



/* Merge all databases, Mc_a, Mc_b,... and jh;*/
Data final_data;
merge Mc_a Mc_b jh ;
by mc;
if zl=. then do;
put 'Data set not found --' mc;
delete;
end;
run;

二维码

扫码加我 拉你入群

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

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

2008-3-15 10:13:00

楼上的,你的这个方法不可取,这种办法处理少量数据集还可以。如果库里用几十个,上百个,或者说上千个数据集呢,怎么写代码?

二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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