SAS|where keep rename

本文详细阐述了SAS中数据处理阶段的执行顺序,包括where、keep/drop和rename操作。无论语句顺序如何,只要内容相同,最终结果一致。在读入和输出数据集时,keep/drop、rename的执行顺序有所不同。同时,where语句作为选项或语句时均即时生效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在编码处理阶段执行顺序是where、keep/drop、rename;
不论语句的顺序怎样,执行顺序不变。只要语句内容相同,执行的最终结果是一样的。

Data class;
set sashelp.class;
rename name=name1;
keep name sex;
where name="Jane";
run;
proc print data=class;
run;


Data class;
Set sashelp.class;
Where name=”Jane”;
Keep name sex;
Rename name=name1;
Drop name sex;/*keep和drop两个不能同时使用*/

在读入和输出数据集阶段的执行顺序是keep/drop、rename、where;

Data test;
set sashelp.class(keep=Name Sex where=(Name1="Jane") rename=(Name=Name1));
run;

Data test1(keep=Name Sex rename=(Name=Name1) where=(Name1="Jane"));
set sashelp.class;
run;

对于keep和drop而言,作为set语句的数据集选项时是即时起作用的,而作为语句是延迟起作用的;对于where而言,作为语句和选项都是一样的,都是即时起作用。

### SAS 中广义线性 Tweedie 模型的交叉验证 在统计建模中,Tweedie 分布是一类特殊的复合泊松分布,在处理具有大量零值和正连续值的数据时非常有用。对于这类模型,进行有效的评估至关重要。 #### 使用 PROC GENMOD 实现 K 折交叉验证 PROC GENMOD 是 SAS 中用于拟合广义线性模型的过程步之一,支持多种分布形式,包括 Tweedie 分布。为了实现 k 折交叉验证,可以采用如下方法: 1. **准备数据** 首先确保输入数据集中包含所有必要的变量,并创建一个新的指示符变量来标记每条观测属于哪一折。 2. **分割数据集** 利用 `SURVEYSELECT` 过程按照指定的比例将原始数据划分为多个子样本集合。例如,如果希望执行五折交叉验证,则可设置 `nfolds=5` 参数[^1]。 3. **构建循环结构** 编写宏程序或 DO 循环语句遍历每一折作为验证集的同时其余部分充当训练集。在此过程中调用 PROC GENMOD 来估计参数并保存预测结果。 4. **计算性能指标** 对于每一次迭代后的预测输出,应用适当的方法衡量模型表现(如均方误差 MSE 或其他适合特定应用场景的标准)。最终汇总各次迭代的结果得到平均评价分数。 以下是具体代码示例: ```sas /* Step 1 & 2: Prepare data and split into folds */ proc surveyselect data=mydata out=cv_data method=random seed=123 nfolds=5; run; %macro cv_loop(); %do i = 1 %to 5; /* Number of folds */ /* Select training set excluding current fold */ data train_set; set cv_data(where=(fold ~= &i)); run; /* Fit GLM with Tweedie distribution on the training set */ proc genmod data=train_set; class categorical_vars / param=glm; model response = continuous_vars dist=tweedie link=log; output out=prediction p=predicted_value; quit; /* Evaluate predictions against test set (current fold) */ data eval_fold&i.; merge prediction(rename=(predicted_value=pred)) cv_data(keep=response where=(fold=&i)); mse = ((response-pred)**2); run; %end; %mend cv_loop; %cv_loop(); /* Aggregate evaluation metrics across all folds */ proc means data=eval_fold_: mean std min max; var mse; output out=mse_summary mean(mse)=avg_mse; run; ``` 此脚本展示了如何通过编程方式完成整个流程,但请注意实际操作时需根据具体情况调整细节配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值