全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
8548 8
2011-02-18
悬赏 23 个论坛币 已解决
纵向合并多个数据文件的时候,例如
DATA newdata;
SET data1 data2 ... datan;
RUN;

使用这种方法合并数据文件,最终文件newdata中的变量属性与data1中相同。
如果原始数据文件data1 data2 ... datan某个(或者某些)变量的长度不同,那么合并后的数据文件内容很有可能会被截取。求一个宏,可以合并任意数目数据文件 data1 data2 ... datan,任意数目变量,newdata任意一个变量的长度均为data1 data2 ... datan中最大的值。
附件给出一个用于合并两个数据文件的例子。多谢。

macro.pdf

大小:34.4 KB

 马上下载

二维码

扫码加我 拉你入群

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

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

全部回复
2011-2-18 08:22:16
复制代码
二维码

扫码加我 拉你入群

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

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

2011-2-18 08:24:07
求大侠提供或者帮着编写一个宏,可以合并任意数目数据文件 data1 data2 ... datan,任意数目变量,newdata任意一个变量的长度均为data1 data2 ... datan中相应变量长度的最大值。
二维码

扫码加我 拉你入群

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

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

2011-2-18 11:00:43
这个Macro应该可以解决你的问题
%macro fwords04(string=,
                root=,
                delim=,
                vnwords=nwords);
  %put ARROW SYSTEM MACRO FWORDS04: Separate a string into words.;
  %global &vnwords;
  %local count word spac;
  %let count=1;
  %if "&delim" ne ""
      %then %let spac=%str(&delim);
  %else %let spac=%str( );;
  %let word=%qscan(&string,&count,&spac);
  %do %while (&word ne);
      %global &root&count;
      %let &root&count=&word;
      %let count=%eval(&count+1);
      %let word=%qscan(&string,&count,&spac);
  %end;
  %let &vnwords=%eval(&count-1);
%mend fwords04;

%macro setdata(inds=, outds=);
%fwords04(string=&inds, root=data, vnwords=datan);
%do i=1 %to &datan;
proc contents
         data=&&data&i out=cont&i noprint;
run;
%end;

data cont;
         set %do i=1 %to &datan; cont&i %end;;
run;
proc sort data=cont; by name length; run;
data attrib;
         set cont;
         by name length;
         if last.name;
         if type=2 then length2='$'||put(length,best.-l);
         else if type=1 then length2=put(length,best.-l);
run;

proc sql noprint;
  select strip(name)||' label='||'"'||strip(label)||'"'||' length='||strip(length2)
  into: attribs separated by ' '
  from attrib
quit;
%put &attribs;
data &outds;
  attrib &attribs;
  set &inds;
run;
%mend setdata;
二维码

扫码加我 拉你入群

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

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

2011-2-18 20:38:35
下面的测试代码应该可以符合你的要求吧,code不是很简洁,见谅了~
复制代码
如果允许改变原数据集 data1...datan 的属性的话,可以直接批量修改各各个数据集中,变量长度为其中的最大值,再set,会简单点
二维码

扫码加我 拉你入群

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

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

2011-2-18 22:46:26
5# hopewell
哈哈,“select catx('.',libname,memname) into: dsn separated by ' ' from sashelp.vmember”,很nice啊,比我那个简单很多啊
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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