楼主: 小鳄鱼a
2289 10

如何产生排列组合的宏变量 [推广有奖]

  • 6关注
  • 10粉丝

已卖:280份资源

学科带头人

3%

还不是VIP/贵宾

-

威望
0
论坛币
125 个
通用积分
0.0040
学术水平
40 点
热心指数
45 点
信用等级
43 点
经验
32801 点
帖子
1185
精华
0
在线时间
1539 小时
注册时间
2009-7-16
最后登录
2018-10-5

楼主
小鳄鱼a 发表于 2014-10-23 23:36:59 |AI写论文
50论坛币
如何产生排列组合的宏变量

现在数据集com中  有 a b c d e f g h 八个变量
现在想在  c d e f g h 中选择4个  分别以比如 %let x1=c d e f ;  以空格或者逗号作为间隔
赋值给x1到 xn宏变量

最佳答案

sniperhgy 查看完整内容

是这个意思吗?
关键词:COM let 数据集 如何

沙发
sniperhgy 发表于 2014-10-23 23:37:00
小鳄鱼a 发表于 2014-10-24 14:07
不好意思    应该是我表达的不太清楚   我的意思是   每个宏变量中包括a b       后面四个来源于留个变量 ...
是这个意思吗?
  1. data _null_;
  2.   array x[6] $1. ('c' 'd' 'e' 'f' 'g' 'h');
  3.   n = dim(x);
  4.   k = 4;
  5.   ncomb = comb(n, k);
  6.   do j = 1 to ncomb + 1;
  7.     rc = allcomb(j, k, of x[*]);
  8.     call symput(strip("X") || strip(j), strip("a b") || " " || strip(x1) || " " || strip(x2) || " " || strip(x3) || " " || strip(x4));
  9.   end;
  10. run;

  11. %put _user_;
复制代码

藤椅
sniperhgy 发表于 2014-10-24 11:19:51
楼主你好,这个要求可以不用宏的,请看:
  1. data var_list;
  2.   input var $1.;
  3.   cards;
  4. c
  5. d
  6. e
  7. f
  8. g
  9. h
  10. ;
  11. run;

  12. proc surveyselect
  13.   data = var_list
  14.   method = srs n = 4
  15.   out = random_var_list;
  16. run;

  17. data _null_;
  18.   set random_var_list;
  19.   call symput(strip("VAR") || _N_, strip(var));
  20. run;
复制代码
已经测试可以正常运行,每一次那个surveyselect都会生成不一样的结果^_^.
已有 1 人评分论坛币 收起 理由
小鳄鱼a + 5 精彩帖子

总评分: 论坛币 + 5   查看全部评分

板凳
sniperhgy 发表于 2014-10-24 11:21:07
已经做了回答,请看一楼的代码
已有 1 人评分论坛币 收起 理由
小鳄鱼a + 5 精彩帖子

总评分: 论坛币 + 5   查看全部评分

报纸
小鳄鱼a 发表于 2014-10-24 12:50:24
sniperhgy 发表于 2014-10-24 11:19
楼主你好,这个要求可以不用宏的,请看:已经测试可以正常运行,每一次那个surveyselect都会生成不一样的结 ...
谢谢,我想产生的是所有的排列组合,可能会用到ncomb函数  ,但是有些格式我太懂 ,有时间的话请看看

地板
sniperhgy 发表于 2014-10-24 13:23:38
小鳄鱼a 发表于 2014-10-24 12:50
谢谢,我想产生的是所有的排列组合,可能会用到ncomb函数  ,但是有些格式我太懂 ,有时间的话请看看
o(∩_∩)o ,不好意思,上一次没有弄懂楼主的意思,请看这个:
  1. data _null_;
  2.   array x[6] $1. ('c' 'd' 'e' 'f' 'g' 'h');
  3.   n = dim(x);
  4.   k = 4;
  5.   ncomb = comb(n, k);
  6.   do j = 1 to ncomb + 1;
  7.     rc = allcomb(j, k, of x[*]);
  8.     put j 5. +3 x1 - x4;
  9.   end;
  10. run;
复制代码
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
小鳄鱼a + 5 + 1 + 1 + 1 精彩帖子

总评分: 论坛币 + 5  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

7
小鳄鱼a 发表于 2014-10-24 14:07:30
sniperhgy 发表于 2014-10-24 13:23
o(∩_∩)o ,不好意思,上一次没有弄懂楼主的意思,请看这个:
不好意思    应该是我表达的不太清楚   我的意思是   每个宏变量中包括a b       后面四个来源于留个变量的组合
比如最好有 x1= a b  c d e f        x2= a b c d e g    x3=a b c d e h    等的组合

8
小鳄鱼a 发表于 2014-10-24 14:46:05
就是这个意思,非常感谢

9
小鳄鱼a 发表于 2014-10-24 14:47:26
sniperhgy 发表于 2014-10-24 13:23
o(∩_∩)o ,不好意思,上一次没有弄懂楼主的意思,请看这个:
能否解释下   
rc = allcomb(j, k, of x
  • );
        call symput(strip("X") || strip(j), strip("a b") || " " || strip(x1) || " " || strip(x2) || " " || strip(x3) || " " || strip(x4));


    一直没搞懂什么意思
  • 10
    小鳄鱼a 发表于 2014-10-24 14:48:04
    ||有什么作用

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

    本版微信群
    加好友,备注cda
    拉您进交流群
    GMT+8, 2026-1-3 12:13