楼主: caibirdcnb
8731 7

[原创博文] 请问高手怎么定义一系列的全局变量,谢谢! [推广有奖]

  • 0关注
  • 37粉丝

讲师

47%

还不是VIP/贵宾

-

威望
0
论坛币
1367 个
通用积分
16.5538
学术水平
67 点
热心指数
70 点
信用等级
64 点
经验
6762 点
帖子
206
精华
2
在线时间
433 小时
注册时间
2011-8-31
最后登录
2023-9-23

楼主
caibirdcnb 发表于 2011-9-17 13:37:42 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
请问各位高手:
需要一系列全局变量例如:A1 A2 A3 A4,同时,1-4是不固定的,变量个数也是不固定的。
例如,X=6,则结果是A7 A8 A9 A10 A11 A12。
例如,X=3,则结果是A4 A5 A6。
do i=X+1 to X+X by 1;
...在此定义系列全局变量...
end;

数组可以定义系列变量,但是只能在数据步用。
非常感谢!
二维码

扫码加我 拉你入群

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

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

关键词:变量个数 非常感谢 End

沙发
yugao1986 发表于 2011-9-17 15:40:00
  1. %macro array(name=,x=);
  2. data _null_;
  3.   array temp(x) &name.%eval(&x+1) - &name.%eval(2*&x);
  4.   put _all_;
  5. run;
  6. %mend;
  7. %array(name=a,x=3);
复制代码
三人行必有我师

藤椅
leedx 发表于 2011-9-17 16:06:36
学习了,谢谢~~~

板凳
caibirdcnb 发表于 2011-9-17 19:20:48
yugao1986,非常感谢。
不过我有个问题就是创建的A4-A6需要能在其它数据步能用,需要是全局变量。你的程序创建的数组似乎是局部变量。

报纸
bobguy 发表于 2011-9-18 04:26:31
Not exactly sure where you need to define those macro variables. Here is a way to define them in a macro.

%macro defgmvar(nstart=0, nstop=1, prefvar=myvar);
   %do i=%eval(&nstart+1) %to &nstop;
      %global &prefvar&i;
        %end;
%mend;


%defgmvar(nstart=4, nstop=7, prefvar=A);
%put _all_;

地板
caibirdcnb 发表于 2011-9-18 13:00:40
bobguy,非常感谢!
我是新手,我理解你的code是会产生A5-A7这3个全局变量。但请问接下来怎么给A5-A7赋值,怎么引用A5-A7呢?谢谢!

显然我这样引用是不行的:
  1. data test;
  2. &a6 = 1;
  3. x = &a6;
  4. run;
复制代码

至于背景是这样的:
在SGPLOT里面的series x = y = /group 的语句中,得到的图形2个Y轴颜色系列不一致,因此需要指定颜色。
然而series x = y = /group 这个语句只能指定1种颜色,但这个语句产生的是多条线(取决于group数量),因此,需要在style模板中直接修改RGB颜色。
如下图所示左轴和右轴曲线的颜色不一致,


通过更改颜色后效果如下:
test13.jpeg

因此,我考虑用类似下面的代码来实现颜色的指定。这样的话,当组数是3的时候,global.1-3和global.4-6颜色对应,同理,当组数是4的时候global.1-4和global.5-8颜色对应。
这样,我再把global.i赋予自定义的style就可实现颜色的指定。
这就是我需要定义系列全局变量global.i的原因。
谢谢!
  1. data _null_;
  2.         array c1; /*(指定6种颜色的RGB代码)*/
  3.         array c2; /*(指定和c1对应6种颜色的RGB代码)*/

  4.         group = 3; /*假设这是组数*/
  5.         
  6.            do i= 1 to group;
  7.                        global.i = c1{i};
  8.         end;
  9.            do i= group + 1 to group + group;
  10.                        global.i = c2{i-group};
  11.         end;
  12. run;
复制代码
具体信息在这个帖子的第一页的倒数第二个回复。
https://bbs.pinggu.org/thread-1167864-1-1.html

7
bobguy 发表于 2011-9-19 11:39:04
caibirdcnb 发表于 2011-9-18 13:00
bobguy,非常感谢!
我是新手,我理解你的code是会产生A5-A7这3个全局变量。但请问接下来怎么给A5-A7赋值, ...
See if the following pgm is helpful.

data test;
    do x=-4 to 4 by 0.1;
        pdf1=pdf('normal',x);
                pdf2=pdf('normal',x, 0.2, 1.2);
        cdf1=cdf('normal',x);
                cdf2=cdf('normal',x, 0.2, 1.2);
        output;
    end;
run;


title "normal pdf and cdf";
proc sgplot data=test ;

    series x=x y=pdf1 / LINEATTRS=solid (color=red);
        series x=x y=pdf2 / LINEATTRS=solid (color=blue);
        series x=x y=cdf1/ y2axis LINEATTRS=solid (color=red);
        series x=x y=cdf2/  y2axis LINEATTRS=solid (color=blue);;
run;
quit;

8
caibirdcnb 发表于 2011-9-19 22:01:50
bobguy,非常感谢!
根据N组数拆分为N列也是种好办法。谢谢!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-9 05:58