cap pr drop matdrop program define matdrop version 10.0 // extract the matrix name from the syntax gettoken matname 0 : 0, parse(" ,") syntax , [r(string) c(string)] if "`r'" == "" & "`c'" == "" { di in bl "Nothing to do here since both options are empty" exit 0 } // temporary name for the matrix tempname matrixname mat `matrixname' = `matname' // get the row and column names of the matrix local rows : rowfullnames `matrixname' local columns: colfullnames `matrixname' scalar full_rows = rowsof(`matrixname') scalar full_columns = colsof(`matrixname') //default to empty lists if none specified local rnamelist "" local cnamelist "" //default to all rows if none specified if "`r'" != "" { local rnamelist: di "`r'" } if "`c'" != "" { local cnamelist: di "`c'" } //handle Row removal if "`rnamelist'" != "" & { local row= "`rnamelist'" scalar row_count = `:word count `row'' if row_count > full_rows{ di in r "row number out of range" exit 498 } if full_rows ==1 { di in r "Only row from the matrix can not be removed" } // Create index for each word in the local rows foreach check_word_row of local row { if "`check_word_row'" != "" { // local index_row = `row_index_`check_word_row'' - shift_row local temp_i = rownumb(`matrixname', "`check_word_row'") matdelrc `matrixname', r(`temp_i') } } if row_count == full_rows{ mat `matrixname' = `matrixname' } } //handle column removal if "`cnamelist'" != "" & { local col= "`cnamelist'" scalar col_count = `:word count `col'' if col_count > full_columns { di in r "Column number out of range" exit 498 } if full_columns ==1 { di in r "Only column from the matrix can not be removed" } foreach check_word_col of local col { if "`check_word_col'" != "" { local temp_j = colnumb(`matrixname', "`check_word_col'") matdelrc `matrixname', c(`temp_j') } } if col_count == full_columns{ mat `matrixname' = `matrixname' } } mat `matname' = `matrixname' end