楼主: dxystata
1557 4

如何在宏中实现差值? [推广有奖]

版主

已卖:302份资源

大师

37%

还不是VIP/贵宾

-

TA的文库  其他...

Software

中英文Ebook

R学习

威望
2
论坛币
183395 个
通用积分
15333.1475
学术水平
208 点
热心指数
271 点
信用等级
174 点
经验
298627 点
帖子
5586
精华
1
在线时间
13632 小时
注册时间
2006-6-21
最后登录
2025-12-22

初级学术勋章 初级热心勋章 中级热心勋章 初级信用勋章

楼主
dxystata 发表于 2013-12-23 18:07:02 |AI写论文
200论坛币
%macro diff(a=,b=,);
......

%mend;

a b 传递数据集的变量,得到&a-&b的差值
a为x0 ,b为x1                  则为x0-x1
a为x0 ,b为x1 x2              则为x0-x1 x0-x2        需要循环
a为x1 x2 ,b为x0              则为x1-x0 x2-x0        需要循环
a为x0 y0 ,b为x1 y1          则为x0-x1 y0-y1        需要循环


a为x0 y0 ,b为x1 y1 x2 y2 则为x0-x1 y0-y1  x0-x2 y0-y2   需要循环
a为x1 y1 x2 y2 ,b为x0 y0 则为x1-x0 y1-y0  x2-x0 y2-y0   需要循环

a为x0 y0 ,b为x1 y1\x2 y2 则为x0-x1 y0-y1  x0-x2 y0-y2   需要循环
a为x1 y1\x2 y2 ,b为x0 y0 则为x1-x0 y1-y0  x2-x0 y2-y0   需要循环



也可能是
a为x4 y4,    b为x1 y1\x2 y2\x3 y3
a为x4 y4 z4,b为x1 y1 z1\x2 y2 z2\x3 y3 z3

如何在宏中实现?要求程序具有通用性。

最佳答案

邓贵大 查看完整内容

正常运行把改成
关键词:Macro Diff MEN Mac 数据集 如何

本帖被以下文库推荐

沙发
邓贵大 发表于 2013-12-23 18:07:03
  1. %macro diff(a=, b=);
  2. %local i j k1 k2;
  3. %local Sa Sb Str;
  4. %local Na Nb La Lb;
  5. %let Na = %sysfunc(countw(&a, \));
  6. %let Nb = %sysfunc(countw(&b, \));

  7. %do i=1 %to %sysfunc(max(&Na, &Nb));
  8.         %let j = %eval(&i - (&i-1)/&Na*&Na);
  9.         %let Sa = %scan(&a, &j, \);
  10.         %let j = %eval(&i - (&i-1)/&Nb*&Nb);
  11.         %let Sb = %scan(&b, &j, \);
  12.        
  13.         %let La = %sysfunc(countw(&Sa, %str( )));
  14.         %let Lb = %sysfunc(countw(&Sb, %str( )));
  15.        
  16.         %do j=1 %to %sysfunc(max(&La, &Lb));
  17.                 %let k1 = %eval(&j - (&j-1)/&La*&La);
  18.                 %let k2 = %eval(&j - (&j-1)/&Lb*&Lb);
  19.                 %let Str = &Str %scan(&Sa, &k1, %str( ))-%scan(&Sb, &k2, %str( ));
  20.         %end;       
  21. %end;       
  22. %put str=&str;
  23. %mend;

  24. %diff(a=x0, b=x1)
  25. %diff(a=x0, b=x1 x2)
  26. %diff(a=x1 x2, b=x0)
  27. %diff(a=x0 y0, b=x1 y1)
  28. %diff(a=x0 y0, b=x1 y1 x2 y2)
  29. %diff(a=x1 y1 x2 y2, b=x0 y0)
  30. %diff(a=x0 y0, b=x1 y1\x2 y2)
  31. %diff(a=x1 y1\x2 y2, b=x0 y0)
  32. %diff(a=x4 y4, b=x1 y1\x2 y2\x3 y3)
  33. %diff(a=x4 y4 z4, b=x1 y1 z1\x2 y2 z2\x3 y3 z3)
复制代码
正常运行把
  1. %put str=&str;
复制代码
改成
  1. &str
复制代码
已有 1 人评分经验 学术水平 热心指数 收起 理由
dxystata + 40 + 1 + 1 热心帮助其他会员

总评分: 经验 + 40  学术水平 + 1  热心指数 + 1   查看全部评分

Be still, my soul: the hour is hastening on
When we shall be forever with the Lord.
When disappointment, grief and fear are gone,
Sorrow forgot, love's purest joys restored.

藤椅
dxystata 发表于 2013-12-23 23:01:07
可以运行啦!

2013-12-23_225945.png (15.13 KB)

2013-12-23_225945.png

板凳
dxystata 发表于 2013-12-23 23:02:17
邓贵大 发表于 2013-12-23 22:51
正常运行把改成
可以运行啦!

报纸
大数据之魂 发表于 2013-12-23 23:22:14
邓贵大 发表于 2013-12-23 18:07
正常运行把改成
邓贵大先生匠心独具  学习了

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

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