全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3800 12
2014-04-05

请大家帮忙看一下,假设现在有1个变量(变量名 var1)包含3条观测(a、b、c),具体如下:

复制代码

现在想用 proc sql 生成一个新的表,表中的行、列(列名 new_var)如下:

复制代码

亦即由原来的3条观测通过排列的方式生成 \[P_{3}^{1}+P_{3}^{2}+P_{3}^{3}=15\] 条新的行(观测)。想了很长时间也没有解决,希望大家帮忙看看,万分感谢。

PS: 当然不用 proc sql 也行,只要最后能生成上述列就可以了,谢谢大家啦^^

二维码

扫码加我 拉你入群

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

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

全部回复
2014-4-6 00:25:07
我来膜拜高手。
二维码

扫码加我 拉你入群

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

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

2014-4-6 01:17:05
完美实现。若把SQL部分改成宏,就可以通用。

复制代码


二维码

扫码加我 拉你入群

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

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

2014-4-6 01:34:23
复制代码
二维码

扫码加我 拉你入群

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

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

2014-4-6 06:55:07
data have;
input var $;
cards;
a
b
c
;
run;

data have1;
set have have;
run;


data _null_;
if 0 then set have(rename=(var=_var));
if _n_=1 then do;
  declare hash h(dataset:'have(rename=(var=_var))',ordered:'a');
  h.definekey('_var');
  h.definedata('_var');
  h.definedone();
  declare hiter hi ('h');
end;
set have1 end=last;
h.find(key:var);
do rc=hi.next() by 0 while (rc=0);
  if findc(compress(_var),compress(var))=0 then do;
   _var=cats(var,_var);
    h.ref();
  end;
rc=hi.next();
end;
if last then h.output(dataset:'want(rename=_var=var)');
run;
   
二维码

扫码加我 拉你入群

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

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

2014-4-6 09:00:54
zhengbo8 发表于 2014-4-6 01:17
完美实现。若把SQL部分改成宏,就可以通用。
嗯嗯~ 非常感谢,正在尝试宏的改写 ^^
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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