楼主: dxystata
1777 2

如何从数据集中将某个变量的format存为宏变量,但format中不包含长度 [推广有奖]

版主

已卖: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 发表于 2016-12-6 08:20:28 |AI写论文
50论坛币
2016-12-06_081207.png
如何从数据集中将某个变量的format存为宏变量,但format中不包含长度。谢谢!
比如变量ALLERGYN,得到的format为HAVE.

最佳答案

prince315 查看完整内容

一个参考思路: 1. Proc Content将数据集的内容输出成一个新data,将需要的变量及其format保留 2. 提取format这个字符串,按照规律去的format而不含长度,如简单的将数字compress掉 3. 将处理后的字符输出成宏变量,如call symput来实现
关键词:format FORMA form For ORM 如何

沙发
prince315 在职认证  发表于 2016-12-6 08:20:29
一个参考思路:
1. Proc Content将数据集的内容输出成一个新data,将需要的变量及其format保留
2. 提取format这个字符串,按照规律去的format而不含长度,如简单的将数字compress掉
3. 将处理后的字符输出成宏变量,如call symput来实现

藤椅
孤单的我们 发表于 2016-12-7 14:00:46
楼上的思路挺好,不过有一个可能会遇到的bug:
当format中包含数字的时候(如format是HA1VE.),compress去掉数字可能会出错。

下面是一个sample

  1. proc format;
  2.         value sex 1='F' 2='M';
  3.         value ra1ce 1='汉族' 2='其他';
  4. run;

  5. data a;
  6.         input id$ sex race;
  7.         format sex sex. race ra1ce.;
  8.         cards;
  9. 001 1 1
  10. 002 1 2
  11. 003 2 2
  12. 004 2 1
  13. ;
  14. run;
复制代码

  1. data b;
  2.    length name $ 8 format $ 10 position 8;
  3.    drop dsid i num rc;
  4.    dsid=open("work.a","i");
  5.    num=attrn(dsid,"nvars");
  6.    do i=1 to num;
  7.       name=varname(dsid,i);
  8.       format=varfmt(dsid,i);
  9.       position=varnum(dsid,name);
  10.       output;
  11.    end;
  12.    rc=close(dsid);
  13. run;
复制代码


这种方法读取的format不含尾部的数字,然后用call symput/symputx创建宏变量。

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

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