楼主: l6397
3654 13

急盼[求助]前辈:数据集的查找并接 [推广有奖]

  • 0关注
  • 0粉丝

博士生

42%

还不是VIP/贵宾

-

威望
0
论坛币
120 个
通用积分
16.6418
学术水平
1 点
热心指数
6 点
信用等级
0 点
经验
3788 点
帖子
235
精华
0
在线时间
178 小时
注册时间
2007-3-28
最后登录
2023-5-13

楼主
l6397 发表于 2008-3-14 20:41:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

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

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

二维码

扫码加我 拉你入群

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

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

关键词:数据集 相同的数据 逻辑库 观测值 前辈 数据集

回帖推荐

icepolice 发表于5楼  查看完整内容

其实不用 Data jh_Mc 一步, 简化了一下:/*set up table a and b, jh */data a;input xh $ zl cd;datalines;a1 1 2a2 3 4;run;data b;input xh $ zl cd;datalines;b 5 6;run;data jh;input mc $ sl;datalines;a 10b 11f 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 ...

icepolice 发表于4楼  查看完整内容

这个比较简单,主要的思路是把每个数据集加一个MC变量, 然后和jh 合并起来就可以了。这方法很笨, 不过能用。水平有限:-)/*set up table a and b, jh */data a;input xh $ zl cd;datalines;a1 1 2a2 3 4;run;data b;input xh $ zl cd;datalines;b 5 6;run;data jh;input mc $ sl;datalines;a 10b 11f 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" ...

wolfcrying 发表于3楼  查看完整内容

可以用 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 i ...

本帖被以下文库推荐

沙发
l6397 发表于 2008-3-14 21:26:00

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

藤椅
wolfcrying 发表于 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编辑过]

已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 10 精彩帖子

总评分: 经验 + 3  论坛币 + 10   查看全部评分

板凳
icepolice 发表于 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;

已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 10 精彩帖子

总评分: 经验 + 3  论坛币 + 10   查看全部评分

报纸
icepolice 发表于 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;

已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 10 精彩帖子

总评分: 经验 + 3  论坛币 + 10   查看全部评分

地板
wolfcrying 发表于 2008-3-15 10:13:00

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

7
l6397 发表于 2008-3-15 18:30:00

非常感谢楼上各位前辈的指教!! 

    我已复制下来,慢慢消化. 感谢前辈的帮助!如有问题再向各位前辈求教.

8
l6397 发表于 2008-3-15 20:40:00

楼上两位前辈的程序都非常正确!!

尤其是 wolfcrying 前辈,您太牛了!

我还想向您请教,如何将数据集jh中的变量mc/名称也加入数据集base中,我试图加上一句call execute("mc="||mc||";"); 可不对.

  还有一个问题:一个数据集A ,里面有一些变量很多观测, 另一数据集B 只有一行观测,变量不同。怎样将数据集A  B并排连接,并将数据集B的数据赋给数据集A的所有观测。                   谢谢!!
如    数据集A                       数据集B                                并接为数据集C                     

    A1   A2   A3                  B1   B2   B3                           A1   A2   A3   B1   B2   B3                                           

     1     2     3                 10    11   12                           1     2     3    10    11   12                           

     4     5     6                                                             4     5     6    10    11   12                           

     7     8     9                                                           7     8     9    10    11   12        

      谢谢!!
               

[此贴子已经被作者于2008-4-9 23:25:00编辑过]

9
wolfcrying 发表于 2008-3-16 00:10:00

call execute("mc="||mc||";")

这当然是不对的,改成call execute("mc='"||mc||'";"),注意双引号里的单引号,

提示你一下:这里出错的原因是没有考虑到MC是一个字符变量

第二个问题更简单了,严格意义上来讲,这样的表连接是不合法的,一般都由外键通过Merge By来进行

就你提到的这种特殊情况,用set/set就可以了

data C;
  set a;
  if _n_=1 then set b;
   retain B1 B2 B3;
   RUN;

10
icepolice 发表于 2008-3-16 08:48:00

楼上, 谢谢你的指点, 我的方法很笨 看你的方法收获量多。 我刚学, 希望你能多多帮助!真心感谢。

 

另外我把你的code 简化了一些。这样可能更有效率吧?不过你的idea 还是很高的! 我只是偷借。

[em04]


data _null_ nonexist;
set jh;
if exist(mc) then do;
call execute("data "||mc||";");
call execute("set "||mc||";");
call execute("mc='"||mc||"';");
call execute("sl="||sl||";");
call execute("run;");
call execute ("proc append base=final data= "||mc||"; run; ");
end;
 else do; message="Dataset: "||compress(mc)||"not exist, Please Check it.";
        keep mc warning;
        output nonexist;
  end;
 run;

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

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