SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 641|回复: 1
打印 上一主题 下一主题

如何在数据集中的特定位置插入列

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2010-10-22 14:14:31 | 只看该作者

如何在数据集中的特定位置插入列

比如数据集A(里面有100个字段),数据集B(里面有20个字段)

根据数据集A中的ID匹配数据集B中的ADDRESS,产生新的数据集C

要求数据集C有A的所有内容,和B的ADDRESS,但是B的ADRRESS必须放在A中取出的ID和ID_TYPE中间

例如
libnam X '文件路径'
proc sql;
create table c as
      select a.1,
               a.2 ,
               a.ID,
               b.ADDRESS,
               a.ID_TYPE,
               ....
               ....
               a.100
        from X.a a left join X.b b
        on a.ID=b.ID;
quit;
但是如果A的字段非常多,一个一个写的话太麻烦,有没有简单点的方法

如何写SAS CODE来实现这个功能呢?

求各位高手指教~
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2010-10-22 15:58:37 | 只看该作者

Re: 如何在数据集中的特定位置插入列

先生成新的变量列,再merge
假设要在列ID后插入一列ADDRESS
[code:g8iu4nvo]
proc sql noprint;
select upcase(name) into :var_list separated by ' '
from dictionary.columns
where libname='WORK' and memname='A';
quit;

%let var1=ID;
%let var2=ADDRESS;
%let pos1=%index(&var_list,&var1);
%let pos2=%eval(&pos1+1+%length(&var1));
%let new_list=%sysfunc(catx(%str( ),%substr(&var_list,1,%eval(&pos1-1)),&var1,&var2,%substr(&var_list,&pos2)));

data c;
retain &new_list;
merge a b;
by id;
run;

[/code:g8iu4nvo]
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-3 20:15 , Processed in 0.464428 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表