楼主: Tigflanker
3519 10

[问答] 如何用宏变量获得某变量的标签 [推广有奖]

  • 8关注
  • 18粉丝

副教授

49%

还不是VIP/贵宾

-

威望
0
论坛币
2321 个
通用积分
9.9128
学术水平
179 点
热心指数
194 点
信用等级
167 点
经验
27443 点
帖子
622
精华
0
在线时间
851 小时
注册时间
2011-3-27
最后登录
2023-5-14

楼主
Tigflanker 发表于 2013-8-2 18:53:35 |AI写论文
20论坛币
如题,例如我有数据库a,变量b,它的 label 叫做c。

%macro m(n);
%let abc=&n;
(如何取得b的标签c,将它存为一个宏变量,例如x)
%put x=&x;(则显示“x=c”)
%mend;

谢谢:)



最佳答案

pobel 查看完整内容

data a; b=1; label b='C'; run; data _null_; if 0 then set a; call symputx('x',vlabel(b)); stop; run; %put x=&x;
关键词:如何用 label Macro Abel CRO 标签 如何

本帖被以下文库推荐

  • · sas|主题: 59, 订阅: 14
Bye SAS.
若有缘,能重聚。

沙发
pobel 在职认证  发表于 2013-8-2 18:53:36
data a;
  b=1;
  label b='C';
run;

data _null_;
   if 0 then set a;
   call symputx('x',vlabel(b));
   stop;
run;
%put x=&x;
和谐拯救危机

藤椅
你的太阳 发表于 2013-8-2 20:51:29
data test;
        label b = "TestLabel";
        b = "test";
run;

%macro getlabel(dsin=,var=);
        %let dsid=%sysfunc(open(&dsin.,i));
        %if &dsid %then %do;
              %let vlabel=%sysfunc(varlabel(&dsid, %sysfunc(varnum(&dsid,&var.))));
                %let rc=%sysfunc(close(&dsid));
               %end;
        %put &vlabel;
%mend;

%getlabel(dsin=test,var=b);
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 谢谢。

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

板凳
Tigflanker 发表于 2013-8-3 10:40:33
pobel 发表于 2013-8-2 20:44
data a;
  b=1;
  label b='C';
正解。我想追问两个问题:

1.if 0 ... 是什么意义呢?

2.能否给我点一下stop是干什么?
Bye SAS.
若有缘,能重聚。

报纸
pobel 在职认证  发表于 2013-8-4 09:45:33
Tigflanker 发表于 2013-8-3 10:40
正解。我想追问两个问题:

1.if 0 ... 是什么意义呢?
if 0 then set 是让sas不去读取数据集中的记录。
stop 是让sas停止这个data步的运行。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 观点有启发

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

和谐拯救危机

地板
Tigflanker 发表于 2013-8-5 09:28:31
pobel 发表于 2013-8-4 09:45
if 0 then set 是让sas不去读取数据集中的记录。
stop 是让sas停止这个data步的运行。
谢谢,stop我明白了,非常精细,我还是有些不是特别明白的是:if 0。这个0是定式还是什么?我的意思是:那么if 1,if 2行不行呢?因为我觉得0是代表布尔的否定,if 0给人一种感觉直接否定了。
Bye SAS.
若有缘,能重聚。

7
Tigflanker 发表于 2013-8-5 09:29:10
pobel 发表于 2013-8-4 09:45
if 0 then set 是让sas不去读取数据集中的记录。
stop 是让sas停止这个data步的运行。
谢谢,stop我明白了,非常精细,我还是有些不是特别明白的是:if 0。这个0是定式还是什么?我的意思是:那么if 1,if 2行不行呢?因为我觉得0是代表布尔的否定,if 0给人一种感觉直接否定了。

追加:难道这个0是仅读取变量?if 1就是仅读取完第一条观测??
Bye SAS.
若有缘,能重聚。

8
pobel 在职认证  发表于 2013-8-5 09:57:57
Tigflanker 发表于 2013-8-5 09:29
谢谢,stop我明白了,非常精细,我还是有些不是特别明白的是:if 0。这个0是定式还是什么?我的意思是:那 ...
if 0 只是说判断语句中的条件是“假”的,then后面的语句不执行。

比如:a=1; b=2;        if a=b then ...;
如果a 永远不等于b,那么then后面的语句是没有机会执行的。
这个判断语句就相当于 if 0 then ...

既然楼主只是想找到某个变量的label,所以也就没有必要去读取(set语句)变量的值了
和谐拯救危机

9
zhengjian614 发表于 2013-8-5 10:00:21
Tigflanker 发表于 2013-8-5 09:28
谢谢,stop我明白了,非常精细,我还是有些不是特别明白的是:if 0。这个0是定式还是什么?我的意思是:那 ...
IF 0就不读了,但是有进行编译。没有看到有用IF 1的。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 1 + 1 恩,就是总感觉if 0很危险,set会被略过

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

10
Tigflanker 发表于 2013-8-5 10:54:19
pobel 发表于 2013-8-5 09:57
if 0 只是说判断语句中的条件是“假”的,then后面的语句不执行。

比如:a=1; b=2;        if a=b the ...
谢谢pobel,if 0 明白了,不过总感觉怪怪的,if 0 ,直接就把后面的语句扼杀了,感觉set 语句没有被sas读到,还需要自己再多体会。。。谢谢
Bye SAS.
若有缘,能重聚。

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

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