如何在SAS中生成随机数值向量并调用SGplot绘制散点图
SAS IML生成随机数对接SGPLOT散点图绘制实现
你只需要把IML过程中生成的随机向量/矩阵输出为标准SAS数据集,就能完全替代datalines手动录入的数据源,直接传入SGPLOT过程绘图,具体实现如下:
完整可运行示例代码
proc iml; N = 94; /* 生成94行2列的随机矩阵,两列分别对应散点图的x、y轴变量 */ rand_pair = j(N, 2); /* 生成0-1区间均匀分布随机数填充矩阵 */ call randgen(rand_pair, 'Uniform'); /* 可选步骤:把随机数映射到0-8整数区间,和你手动录入的数据取值范围匹配,不需要可删除 */ rand_pair = round(rand_pair * 8, 1); /* 核心:将IML矩阵写入标准SAS数据集 */ create rand_plot_data var {x y}; /* 创建名为rand_plot_data的数据集,定义x、y两个变量 */ append; /* 矩阵第一列写入x,第二列写入y */ close rand_plot_data; /* 关闭数据集完成写入 */ quit; /* 和调用手动录入的数据集用法完全一致,直接传参给SGPLOT绘图 */ proc sgplot data=rand_plot_data; scatter x=x y=y; run;
关键注意事项
- IML过程必须用
quit语句结束,不要用run,否则可能出现数据集锁定,导致后续SGPLOT无法读取数据。 create语句中var {}内的变量顺序必须和矩阵列顺序一一对应,否则会出现变量值错位的问题。- 如果你是分开生成x、y两个独立随机向量,不需要拼接成矩阵,写入数据集时单独指定对应向量即可,示例:
proc iml; N = 94; x = j(N,1); y = j(N,1); call randgen(x, 'Uniform'); call randgen(y, 'Normal'); /* y轴变量可单独指定分布,比如正态分布 */ /* 写入数据集时单独指定变量和向量的对应关系 */ create rand_plot_data var {x y}; append var {x y}; close rand_plot_data; quit;
- 生成的
rand_plot_data是标准SAS数据集,和datalines录入生成的数据集没有任何结构差异,支持所有SAS过程步、数据步的操作。
内容的提问来源于stack exchange,提问作者bcg
相关产品推荐
相关产品推荐

