🧠 Monday Theme: β€œCode as Protocol, Folder as Ethic”#

β€œDrop this .do file and your .dta into a folder. Click run. It’ll do the rest.” That’s what a non-Stata data guardian needs. It creates an ethical workspace, keeps outputs contained, and produces verifiable artifacts: logs, tables, plots.


πŸ—οΈ Folder Architecture (Scaffold for All Projects)#

project/
β”œβ”€β”€ code/           # .do files
β”‚   └── lab5_template.do
β”œβ”€β”€ data/           # .dta files go here
β”œβ”€β”€ output/         # Graphs, logs, tables
β”œβ”€β”€ notes/          # README, variable dictionary, protocols
└── master.do       # Calls everything in code/

πŸ”Ή lab5_template.do (for students β€” ready to fill in)#

************************************************************
* lab5.do - Self-organizing portable lab file (needs debugging)
************************************************************

clear all
set more off

* 1. Define root folder
local root = c(pwd)

* 2. Define folder paths
local data   "`root'/data"
local output "`root'/output"
local code   "`root'/code"
local notes  "`root'/notes"

* 3. Create folders
capture mkdir "`data'"
capture mkdir "`output'"
capture mkdir "`code'"
capture mkdir "`notes'"

* 4. Move all .dta files into /data/
local dtafiles : dir "`root'" files "*.dta"
foreach f of local dtafiles {
    local src "`root'/`f'"
    local dest "`data'/`f'"
    copy "`src'" "`dest'", replace
    erase "`src'"
}

* 5. Change directory to /data
cd "`data'"

* 6. Start log
log using "`output'/lab5_output.log", replace

* 7. Load and merge data
use transplants.dta, clear
merge 1:1 fake_id using donors_recipients.dta
drop if _merge != 3

* 8. Create variables
gen over50 = age > 50
gen f_time = end_d - transplant_d
format transplant_d end_d %td
stset f_time, failure(died)

* 9. Graph
sts graph, by(over50)
graph export "`output'/survival_over50.png", replace

* 10. Close log
log close
v1.1
************************************************************
* lab5.do - Self-organizing portable lab file  
************************************************************

clear all
set more off

* 1. Define root folder
local root = c(pwd)

* 2. Define folder paths
local data   "`root'/data"
local output "`root'/output"
local code   "`root'/code"
local notes  "`root'/notes"

* 3. Create folders
capture mkdir "`data'"
capture mkdir "`output'"
capture mkdir "`code'"
capture mkdir "`notes'"

* 4. Move all .dta files into /data/
local dtafiles : dir "`root'" files "*.dta"
foreach f of local dtafiles {
    local src "`root'/`f'"
    local dest "`data'/`f'"
    copy "`src'" "`dest'", replace
    erase "`src'"
}

* 5. Change directory to /data
//cd "`data'"

* 6. Start log
capture drop _all
log using "`output'/lab5_output.log", replace

* 7. Load and merge data
use "`data'/transplants.dta", clear
merge 1:1 fake_id using data/donors_recipients.dta
drop if _merge != 3

* 8. Create variables
gen over50 = age > 50
gen f_time = end_d - transplant_d
format transplant_d end_d %td
stset f_time, failure(died)

* 9. Graph
sts graph, by(over50)
graph export "`output'/survival_over50.png", replace

* 10. Close log
log close
display "βœ… All done. No errors. Outputs created."
v1.2
* ************************************************************
* lab5_template.do - Self-organizing, reproducible lab file
* Designed for OS-agnostic use + graceful handoff to others
* ************************************************************

clear all
set more off

* 🌊 INIT: Declare root & core folders (relative to current location)
local root = c(pwd)
foreach folder in data output code notes {
    local `folder' "`root'/`folder'"
    capture mkdir ``folder''
}

* ❀️ COMMIT: Move all .dta files into /data/ so it's clean + modular
local dtafiles : dir "`root'" files "*.dta"
foreach f of local dtafiles {
    local src  "`root'/`f'"
    local dest "`data'/`f'"
    copy "`src'" "`dest'", replace
    erase "`src'"
}

* πŸŒ€ FORK: Create structure for logging & error checking
capture drop _all
log using "`output'/lab5_output.log", replace

* 🐬 BRANCH: Load and prepare data
use "`data'/transplants.dta", clear
merge 1:1 fake_id using "`data'/donors_recipients.dta"
drop if _merge != 3

* πŸ” MERGE: Create variables, apply formats, and set survival time
gen over50 = age > 50
gen f_time = end_d - transplant_d
format transplant_d end_d %td
stset f_time, failure(died)

* πŸ“Š OUTPUT: Graph and export results
sts graph, by(over50)
graph export "`output'/survival_over50.png", replace

* βœ… CLOSE: Log and finish
log close
display "βœ… All done. No errors. Outputs created."
v1.3
/**************************************************************************
 πŸ” just-click.do – Self-organizing, reproducible lab file
     β–Έ OS-agnostic
     β–Έ Modular folder structure
     β–Έ Canonical symbolic stages: INIT β†’ COMMIT β†’ FORK β†’ BRANCH β†’ MERGE β†’ OUTPUT
**************************************************************************/

clear all
set more off

* 🌐 Set global slash (optional – only needed for shell calls)
if c(os) == "Windows" {
    global SL "\"
}
else {
    global SL "/"
}

* 🌊 INIT: Define root + core folders (relative to current location)
global root = c(pwd)
foreach folder in data output code notes {
    local fpath = "$root/${SL}`folder'"
    capture mkdir "`fpath'"
    global `folder' "`fpath'"
}

* ❀️ COMMIT: Move all .dta files into /data for cleanliness
local dtafiles : dir "$root" files "*.dta"
foreach f of local dtafiles {
    local src  "$root/${SL}`f'"
    local dest "$data/${SL}`f'"
    copy "`src'" "`dest'", replace
    erase "`src'"
}

* πŸŒ€ FORK: Setup logging and clear memory
capture drop _all
log using "$output${SL}lab5_output.log", replace

* 🐬 BRANCH: Load and prep data
use "$data${SL}transplants.dta", clear
merge 1:1 fake_id using "$data${SL}donors_recipients.dta"
drop if _merge != 3

* πŸ” MERGE: Generate variables, set time-to-event
gen over50 = age > 50
gen f_time = end_d - transplant_d
format transplant_d end_d %td
stset f_time, failure(died)

* πŸ“Š OUTPUT: Graph results
sts graph, by(over50)
graph export "$output${SL}survival_over50.png", replace

* βœ… CLOSE: Done
log close
noi di as result "βœ… All done. No errors. Outputs created."

πŸ”Έ master.do (for non-Stata collaborator to run)#

************************************************************
*  master.do - Safe and Reproducible Entry Point
*  For: Non-Stata collaborators, remote collaborators
************************************************************

* Detect current directory
cd "`c(pwd)'"

* Create subfolders if needed
cap mkdir data
cap mkdir code
cap mkdir output
cap mkdir notes

* Reminder
di "βœ… Project folders ready. Now place .dta files in /data, .do files in /code"

* Run lab5 template if it exists
cap do code/lab5_template.do

πŸ’‘ Teaching Objectives for Monday#

Skill

Why It Matters

Folder discipline

Prevents sprawl and broken links

cd, mkdir, local

Teaches controlled automation

Logging

Accountability and reproducibility

master.do

Separates execution from authoring

Relative paths

Works across systems (Mac/PC/Linux)

Clear entry point

Makes your collaborator feel safe


πŸ›‘οΈ Key Metaphor#

The folder is your lab bench. The .do file is your protocol. The log is your lab notebook. The graph is your publication. Don’t contaminate.