SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

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

跟crackman读SAS程序(83)--如何在数据集中的特定位置插入列

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2010-10-28 14:13:19 | 只看该作者

跟crackman读SAS程序(83)--如何在数据集中的特定位置插入列

From crackman's blog on Baidu


               
                <p>比如数据集A(里面有100个字段),数据集B(里面有20个字段)<br>
<br>
根据数据集A中的ID匹配数据集B中的ADDRESS,产生新的数据集C<br>
<br>
要求数据集C有A的所有内容,和B的ADDRESS,但是B的ADRRESS必须放在A中取出的ID和ID_TYPE中间<br>
<br>
<font face="NSimsun">proc sql noprint;<br>
select upcase(name) into :var_list separated by ' '<br>
from dictionary.columns<br>
where libname='WORK' and memname='A';<br>
quit;<br>
/*第一个:<strong><font style="background-color: #ff0000">利用UPCASE函数</font></strong>消除大小写不一致的情况,让所有的变量都进入宏变量VAR_LIST字符串中*/</font></p>
<p><font face="NSimsun">/*利用DICTIONSARY COLUMNS这个TABLE里面的LIBNAME MENNAME,确定要获取变量名的数据集*/<br>
%let var1=ID;<br>
%let var2=ADDRESS;<br>
%let pos1=%index(&amp;var_list,&amp;var1);/*获得你要插入位置前的变量的位置,INDEX返回一个数字值*/<br>
%let pos2=%eval(&amp;pos1+1+%length(&amp;var2));/*插入一个字符串之后,插入之后,之前预定要插入位置的下一个字符串的起始位置*/<br>
%let new_list=%sysfunc(catx(%str( ),%substr(&amp;var_list,1,%eval(&amp;pos1-1)),&amp;var1,&amp;var2,%substr(&amp;var_list,&amp;pos2)));/*连接形成新的字符串宏变量值*/<br>
<br>
data c;<br>
retain &amp;new_list;<br>
merge a b;<br>
by id;<br>
run;</font><br>
<br>
1 INDEX函数的利用,发现在一个字符串中,某个特定字符或者字符串的位置</p>
<p>2 LENGTH或者一个字符串的长度</p>
<p>3 CATX的连接,注意这里有一个%STR().</p>
<p> </p> <a href="http://hi.baidu.com/crack%5Fman/blog/item/7bc555641a0cf6d08cb10dc8.html">阅读全文</a>
               
                <br/><b>类别:</b><a href="http://hi.baidu.com/crack%5Fman/blog/category/%B8%FAcrackman%B6%C1sas%B3%CC%D0%F2">跟crackman读sas程序</a>&nbsp;<a href="http://hi.baidu.com/crack%5Fman/blog/item/7bc555641a0cf6d08cb10dc8.html#comment">查看评论</a>
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2011-4-18 05:18:24 | 只看该作者

Re: 跟crackman读SAS程序(83)--如何在数据集中的特定位置插入列

为什么我运行你的程序后显示的是
proc sql noprint;
select upcase(name) into :var_list separated by ' '
from dictionary.columns
where libname='d' and memname='c';
[color=#FF4040:3cm8h25z]NOTE: No rows were selected.[/color:3cm8h25z]
为什么?我装了sql组件的
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 15:12 , Processed in 0.066470 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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